S o Я пишу свой собственный вариант метода toString()
и в основном, когда вы вызываете метод, который вы передаете в строке, а затем аргумент toString(Object... args)
. Как иJava Regex, чтобы увидеть, содержит ли строка% s,% d,% n
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
, и из него хранятся в строке, которая будет использоваться позже в cobination с String.format(format, argument);
.
Так что если бы кто-нибудь мог мне помочь, это было бы здорово!
Благодарим вас за это.
Эй, это сработало очень хорошо, спасибо вам большое! –