我正在尝试使用字符串的 .format
方法 . 但是如果我在字符串中放置%1,%2等,则会抛出java.util.UnknownFormatConversionException指向令人困惑的Java源代码段:
private void checkText(String s) {
int idx;
// If there are any '%' in the given string, we got a bad format
// specifier.
if ((idx = s.indexOf('%')) != -1) {
char c = (idx > s.length() - 2 ? '%' : s.charAt(idx + 1));
throw new UnknownFormatConversionException(String.valueOf(c));
}
}
据此我明白 %
char是被禁止的 . 如果是这样,那么我应该将什么用于参数占位符?
我用Scala 2.8 .
11 回答
这是
String.format
可以做的事情列表 .printf
也一样以下是与String.format()一起使用的格式化程序列表
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html
虽然之前的所有回复都是正确的,但它们都是Java语言 . 这是一个Scala示例:
我还有一篇关于making format like Python's % operator的博客文章可能有用 .
您无需使用数字来指示定位 . 默认情况下,参数的位置只是它在字符串中出现的顺序 .
以下是使用此方法的正确方法示例:
您将始终使用
%
后跟其他一些字符让方法知道它应该如何显示字符串 .%s
可能是最常见的,它只是意味着该参数应被视为字符串 .我不会列出所有选项,但我会举几个例子来给你一个想法:
String.format
只使用java.util.Formatter
,因此有关选项的完整说明,您可以看到Formatter javadocs .并且,正如BalusC所提到的,如果需要,您将在文档中看到可以更改默认参数排序 . 但是,您可能只需要/想要这样做的唯一时间就是您多次使用相同的参数 .
您应该阅读javadoc String.format()和Formatter syntax,而不是查看源代码 .
您可以在%之后指定值的格式 . 例如,对于十进制整数,它是
d
,对于String,它是s
:输出:
要执行您尝试的操作(使用参数索引),请使用:
*n*$
,输出:
你可以用这个;
输出:
另请注意,Scala使用多种方法扩展String(通过隐式转换为Predef引入的WrappedString),因此您还可以执行以下操作:
官方参考是Formatter类 .
在Scala 2.10中
虽然@Londo提到Scala 's 1146351 string interpolator, I think Scala' s "f" string interpolator与原始问题更相关 . 在其他响应中使用了一些时间的例子也可以这样编写(因为Scala 2.10):
与原始问题的关联是要注意:
formatted
定义了一个以字母_1146356为前缀的字符串 . 这是"f"(格式化)字符串插值器 ."f"字符串插补器使用
java.util.Formatter
java.lang.String.format
使用相同的java.util.Formatter
字符串插值的好处在于,它允许您查看哪个变量直接替换为字符串,而不必将其与
String.format
方法的参数进行匹配 .在scala中,对于字符串插值,我们有 $ 可以节省一天,让我们的生活变得轻松:
For Example: 您想要定义一个接受输入名称和年龄的函数,并使用名称说出Hello并说明其年龄 . 这可以这样写:
因此,当你调用这个函数时:像这样:
它的输出将是:
您可以编写代码以在同一行中更改它,例如,如果您想要添加10年的年龄!
然后功能可以是:
现在输出将是: