2012-04-05 5 views
1

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);.

Так что если бы кто-нибудь мог мне помочь, это было бы здорово!
Благодарим вас за это.

ответ

2

Попробуйте

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

вы можете сохранить шаблон как глобальный или статической переменной и использовать его, когда вам нужно.

+0

Эй, это сработало очень хорошо, спасибо вам большое! –

Смежные вопросы