Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在strings.xml格式的字符串中包含%n个换行符以及参数?_Java_Android_String_String Formatting_Format String - Fatal编程技术网

Java 是否可以在strings.xml格式的字符串中包含%n个换行符以及参数?

Java 是否可以在strings.xml格式的字符串中包含%n个换行符以及参数?,java,android,string,string-formatting,format-string,Java,Android,String,String Formatting,Format String,我对android格式字符串中的%n新行有问题 这是预期输出: 地址行1 城市、州 因此,我创建了如下格式字符串: %s%n%s, %s 但我有一个错误: 错误:以非位置格式指定了多个替换;您的意思是添加formatted=“false”属性吗 我的字符串已格式化,因此第二个解决方案似乎没有意义,因此我将%s的位置设置为: %1$s%n%2$s, %3$s 但我还是犯了同样的错误 因此,我也尝试将%n定位,只是想看看这是否能解决问题: %1$s%4$n%2$s, %3$s 然后我通过ja

我对android格式字符串中的
%n
新行有问题

这是预期输出:

地址行1
城市、州
因此,我创建了如下格式字符串:

%s%n%s, %s
但我有一个错误:

错误:以非位置格式指定了多个替换;您的意思是添加formatted=“false”属性吗

我的字符串已格式化,因此第二个解决方案似乎没有意义,因此我将
%s
的位置设置为:

%1$s%n%2$s, %3$s
但我还是犯了同样的错误

因此,我也尝试将
%n
定位,只是想看看这是否能解决问题:

%1$s%4$n%2$s, %3$s
然后我通过
java.util.Formatter
得到一个运行时错误(!!!):

E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.app, PID: 27843
        java.util.IllegalFormatFlagsException: %n doesn't take an argument
            at java.util.Formatter$FormatToken.checkFlags(Formatter.java:1373)
            at java.util.Formatter.transform(Formatter.java:1442)
            at java.util.Formatter.doFormat(Formatter.java:1081)
            at java.util.Formatter.format(Formatter.java:1042)
            at java.util.Formatter.format(Formatter.java:1011)
            at java.lang.String.format(String.java:1554)
            at android.content.res.Resources.getString(Resources.java:431)
            ... // omitting project specific files
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:152)
            at android.app.ActivityThread.main(ActivityThread.java:5497)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
如何将
%n
换行符与其他格式参数一起放在strings.xml格式字符串中?可能吗?如果没有,显示换行符的最佳方式是什么?

Android文档或api指南参考将不胜感激。

这可能是一个bug

看看AAPT的来源——特别是在。它统计字符串中的参数数,以检查它们是否应该是位置参数。它确保跳过文字百分比符号(
%%
),但不跳过特定于平台的换行符(
%n

我在报告中提出了这个问题

目前,除了使用
\n
之外,我看不到其他解决方案


编辑:该问题已在跟踪器中标记为已修复。

@Distwo
\n
有效,但我更喜欢在格式字符串中使用
%n
,因此我更新了我的问题,询问是否有任何方法可以使用
%n
,如果没有,最好的换行方法是什么。也许答案是这是不可能的,
\n
是最好的解决方案。那么:
%1$s%2$n%3$s,%4$s
无需担心。。。不起作用。@Distwo是的,很不幸,
格式化程序
类似乎不接受带有参数的
%n
,但Android不接受没有参数的
%n
。。。