我正在尝试使用字符串的.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。


当前回答

在Scala 2.10中

val name = "Ivan"
val weather = "sunny"

s"Hello $name, it's $weather today!"

其他回答

官方引用是类Formatter。

下面是String.format()使用的格式化程序列表

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

在Scala 2.10中

val name = "Ivan"
val weather = "sunny"

s"Hello $name, it's $weather today!"

你可以用这个;

String.format("%1$s %2$s %2$s %3$s", "a", "b", "c");

输出:

A b b c

还要注意,Scala用许多方法扩展了String(通过Predef引入的WrappedString的隐式转换),所以你还可以做以下事情:

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