gpt4 book ai didi

Java 正则表达式查看字符串是否包含 %s、%d、%n

转载 作者:行者123 更新时间:2023-12-04 05:51:07 24 4
gpt4 key购买 nike

小号 o 我正在写我自己的 toString() 变体方法,基本上当你调用方法时,你传入一个字符串,然后传入一个参数 toString(Object... args) .像这样

this.toString("%8s", this.log, "%n%s %s", this.theMap, "%s", this.countIterator());

然后我使用以下代码来查看传入的参数是常规字符串还是格式字符串。
if(args[i].getClass().getName() == "java.lang.String") {
if(args[i].toString().contains("%\\-?[1-9]s?*")) {

format = args[i].toString();

} else {

s += args[i].toString();

}
}
args[i].toString().contains("%\\-?[1-9]s?*")正则表达式不起作用,但是当我使用 args[i].toString().matches("%\\-?[1-9]s?*")它有效,但仅适用于 %s 的字符串实例或 %9s不适用于 %s %9s 的实例或 %s%s %s .当我交换 s 时它也有效在正则表达式中带有 dn .

我知道你问为什么要重新发明轮子,只需使用 String.format() ,我应该只是我已经想到了这个,在我解决它之前不能做任何其他事情。

我也尝试复制和粘贴 java.util.Formatter类(class)' "%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])" regex 但它的作用与上述相同,仅适用于 %s%9s .

我还注意到在 Formatter 类中,开发人员使用 Matcher 类的实例和 Patern 类的实例,并使用 for 循环来运行 String 并匹配模式的每个实例并将其存储到 ArrayList 中。我真的不想那样做,我只想看看 String 参数是否有一个 %n 实例或 %s%d并将其存储在一个字符串中,稍后将与 String.format(format, argument); 结合使用。 .

因此,如果有人可以帮助我,那就太棒了!
感谢您阅读到这里。

最佳答案

试试这个

Pattern p = Pattern.compile("(%[0-9]*(s|d|n))");
System.out.println("match: " + p.matcher(str).find());

您可以将模式存储为全局或静态变量,并在需要时重用它。

关于Java 正则表达式查看字符串是否包含 %s、%d、%n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035734/

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