java - scala如何使用java.String.format?

  显示原文与译文双语对照的内容

试图使用字符串的.format 方法。 但是如果我将 %1, %2, 等等 放在字符串中,java.util.UnknownFormatConversionException 就会指向一个令人困惑的Java源代码 Fragment:


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));
 }
}

由此我理解 % 字符是禁止的。 如果是,那么我应该使用什么参数占位符?

我使用 Scala 2.8.

时间:

尽管前面的所有响应都是正确的,但它们都是 Java 。 下面是一个 Scala 示例:


val placeholder ="Hello %s, isn't %s cool?"
val formatted = placeholder.format("Ivan","Scala")

我也有一篇关于使 format% python 运营商可能是有用的。

你不需要使用数字来表示定位。 默认情况下,参数的位置只是它在字符串中出现的顺序。

下面是使用这里方法的正确方法:


String result = String.format("The format method is %s!","great");
//result now equals"The format method is great!".

你将总是使用 % 后跟其他一些字符,让该方法知道如何显示字符串。 %s 可能是最常见的,它只是意味着参数应该被当作字符串对待。

我不会列出每一个选项,但是我会给出一些示例,让你知道:


//we can specify the # of decimals we want to show for a floating point:
String result = String.format("10/3 = %.2f", 10.0/3.0);
//result now equals"10/3 = 3.33"

//we can add commas to long numbers:
result = String.format("Today we processed %,d transactions.", 1000000);
//result now equals"Today we processed 1,000,000 transactions."

String.format 只使用 java.util.Formatter,因此对于你可以看到的选项的完整描述,你可以看到格式化程序的javadoc 。

并且,就像BalusC提到的,你将在文档中看到可以更改默认参数顺序( 如果你需要。 然而,你可能需要/想做的是,如果你使用的参数不止一次。

你应该阅读 javadoc String.format()格式化程序语法,而不是查看源代码。

在 %. 之后指定值的格式 对于十进制整数,它是 d,对于字符串,它是 s:


String aString ="world";
int aInt = 20;
String.format("Hello, %s on line %d", aString, aInt );

输出:


Hello, world on line 20

要执行你尝试的( 使用参数索引),你可以使用: *n*$


String.format("Line:%2$d. Value:%1$s. Result: Hello %1$s at line %2$d", aString, aInt );

输出:


Line:20. Value:world. Result: Hello world at line 20

还请注意,Scala 使用许多方法扩展字符串,因此你也可以执行以下操作:


val formattedString ="Hello %s, isn't %s cool?".format("Ivan","Scala")

...