如何检查一个字符串是否必须动态地用格式化方法完成?

How to check if a String must be completed with format method dynamically?

我有以下字符串:

s = "The device %s was opened."
  1. 是否有可能知道String是否必须用格式化方法填充?

  2. 如果第一个问题是,有没有可能知道这个字符串中有多少个%s

要知道字符串是否包含 %s 使用:

s.contains("%s")

要计算字符串中“%s”的数量,您可以使用:

s.split("%s").length - 1;

仅当 contains 返回 true 时才应使用第二部分。 例如:

public static void main(String[] args)
{
String s = "ssss %s %s gg";
boolean b = s.contains("%s");
int count = 0;
if (b)
{
    count = s.split("%s").length - 1;
}
System.out.println("b: " + b);
System.out.println("count: " + count);
}

简答

没有。

更多详情

你无法判断字符串是否 "must be filled with a format method" 因为, 用于标记 printf 格式方法的插入点的字段可能是有效的字符串内容。 这是一个例子:

The insert point for a String parameter is "%s"

这个字符串不需要格式化, 但包含一个有效的插入点。

你想要的答案

String.format 方法的每个插入点都包含一个百分号 (%), 但是格式字符串相当复杂。 您将需要解析字符串并搜索插入点。

尝试在 google 中搜索 Formatter.java 来源。

这是 API 页面:Formatter

用于检查您的字符串是否包含“%s”符号和 return 个符号的代码示例。

 import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class Test {

        public static void main (String[] args) {

            String s = "%s my string with %s";

            int i = 0;
            Pattern p = Pattern.compile("%s");
            Matcher m = p.matcher(s);
            while (m.find()) {
                i++;
            }
            System.out.println(i);
        }
    }