gpt4 book ai didi

java - 获取 Formatter.format() String 中占位符的数量

转载 作者:行者123 更新时间:2023-12-01 12:44:00 25 4
gpt4 key购买 nike

在 Java 程序中,我使用带有 Formatter.format() 的字符串功能,我从服务器获得。我不能确定 String要格式化的有占位符或有效数量的占位符。如果是 String不像预期的那样我想抛出一个异常 - 或者以某种方式记录它。

在这一点上,我不在乎占位符的类型是什么(StringInteger,...),我只想获取每个字符串的预期参数数量。

实现这一目标的最简单方法是什么?一种方法可能是使用正则表达式,但我在想是否有更方便的方法 - 例如内置函数。

这里有些例子:

Example String | number of placeholders:
%d of %d | 2
This is my %s | 1
A simple content. | 0
This is 100% | 0
Hi! My name is %s and I have %d dogs and a %d cats. | 3

编辑:
如果提供的参数不足,Formatter.format() 会抛出异常。我有可能得到一个没有占位符的字符串。在这种情况下,即使我提供参数(将被省略),也不会抛出异常(即使我想抛出一个),只会返回 String 值。我需要向服务器报告错误。

最佳答案

您可以使用定义占位符格式的正则表达式来计算字符串中的匹配总数。

// %[argument_index$][flags][width][.precision][t]conversion
String formatSpecifier
= "%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])";
// The pattern that defines a placeholder
Pattern pattern = Pattern.compile(formatSpecifier);
// The String to test
String[] values = {
"%d of %d",
"This is my %s",
"A simple content.",
"This is 100%", "Hi! My name is %s and I have %d dogs and a %d cats."
};
// Iterate over the Strings to test
for (String value : values) {
// Build the matcher for a given String
Matcher matcher = pattern.matcher(value);
// Count the total amount of matches in the String
int counter = 0;
while (matcher.find()) {
counter++;
}
// Print the result
System.out.printf("%s=%d%n", value, counter);
}

输出:
%d of %d=2
This is my %s=1
A simple content.=0
This is 100%=0
Hi! My name is %s and I have %d dogs and a %d cats.=3

关于java - 获取 Formatter.format() String 中占位符的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com