如何检查一个字符串是否必须动态地用格式化方法完成?
How to check if a String must be completed with format method dynamically?
我有以下字符串:
s = "The device %s was opened."
是否有可能知道String是否必须用格式化方法填充?
如果第一个问题是,有没有可能知道这个字符串中有多少个%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);
}
}
我有以下字符串:
s = "The device %s was opened."
是否有可能知道String是否必须用格式化方法填充?
如果第一个问题是,有没有可能知道这个字符串中有多少个
%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);
}
}