如何使用java。String.format in Scala?

2022-08-31 04:58:49

我正在尝试使用字符串的方法。但是,如果我在字符串中放置 %1、%2 等,则会抛出 java.util.UnknownFormatConversionException,指向一个令人困惑的 Java 源代码片段:.format

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。


答案 1

虽然之前的所有响应都是正确的,但它们都是在Java中。下面是一个 Scala 示例:

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

我还有一篇关于制作格式的博客文章,比如Python的%运算符,这可能很有用。


答案 2

您无需使用数字来指示位置。默认情况下,参数的位置只是它在字符串中的出现顺序。

以下是正确使用它的示例:

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只需使用 ,因此有关选项的完整描述,您可以看到格式化程序javadocsjava.util.Formatter

而且,正如BalusC所提到的,您将在文档中看到,如果需要,可以更改默认参数顺序。但是,您可能唯一需要/想要执行此操作的时间是多次使用相同的参数。