S 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
或d
交换正则表达式中的n
时,它也有效。
我知道你问为什么要重新发明方向盘,只需使用String.format()
,我应该只是因为我已经考虑到了这一点,在解决之前别无能为力。
我还尝试复制并粘贴java.util.Formatter
类'
"%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])"
正则表达式,但它与上面的相同,仅适用于%s
或%9s
。
我还注意到在Formatter类中,开发人员使用Matcher类的实例和Patern类的实例,并使用for循环运行String并匹配模式的每个实例并将其存储到ArrayList中。我真的不想这样做,我只是想看看String参数是否有一个%n
或%s
或%d
的实例,并从那个存储它将在一个字符串中稍后将与String.format(format, argument);
结合使用。
所以如果有人能帮助我那就太棒了! 感谢您阅读此内容。
答案 0 :(得分:3)
试试这个
Pattern p = Pattern.compile("(%[0-9]*(s|d|n))");
System.out.println("match: " + p.matcher(str).find());
您可以将模式存储为全局或静态变量,并在需要时重复使用。