如何检查String是否必须动态地使用format方法完成?

时间:2016-03-01 14:17:27

标签: java string string-formatting

我有以下字符串:

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

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

3 个答案:

答案 0 :(得分:2)

简答

没有

更多细节

您无法判断字符串“是否必须使用格式方法填充”,因为, 用于标记 printf 格式方法的插入点的字段是潜在有效的字符串内容。 这是一个例子:

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

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

您想要的答案

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

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

以下是API页面:Formatter

答案 1 :(得分:1)

代码示例以检查您的字符串是否包含'%s'符号和返回计数。

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

答案 2 :(得分:0)

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

s.contains("%s")

计算"%s"的数量在String中,您可以使用:

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