2012-04-05 9 views
1

S o私はtoString()メソッドの独自のバリエーションを作成しています。 toString(Object... args)。そう文字列に%s、%d、%nが含まれているかどうかを調べるJava Regex

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

ように、私は、渡された引数は、通常の文字列またはフォーマット文字列であるかどうかを確認するために、次のコードを使用していることから。 args[i].toString().contains("%\\-?[1-9]s?*")正規表現が動作していない

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().matches("%\\-?[1-9]s?*")を使用する場合、しかし、それだけではない%s %9s%s%s %sとインスタンスの%sまたは%9sを持つStringのインスタンスが、動作します。また、dまたはnと正規表現のsを交換すると動作します。

私はあなたの車輪を再発明する理由を知っています。ちょうどString.format()を使用してください。私はこれを私の心に持っていて、解決するまで何もできません。

私はまた、コピーしようとしたjava.util.Formatterクラスの
"%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])"正規表現を貼り付けるが、それは上記と同じことをやっただけ%sまたは%9sのために働きました。

また、Formatterクラスでは、開発者がPaternクラスのインスタンスでMatcherクラスのインスタンスを使用し、forループを使用してStringを実行し、パターンの各インスタンスをマッチングして配列リスト。 String引数のインスタンスが%nまたは%sまたは%dであるかどうかを確認し、後でString.format(format, argument);と組み合わせて使用​​されるStringに格納するかどうかを確認したいだけです。

誰かが私を助けることができたらそれはすばらしいでしょう!
これまで読んでいただきありがとうございます。

答えて

2

は、グローバルまたは静的変数としてパターンを保存し、必要なときにそれを再利用することができ、この

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

を試してみてください。

+0

本当にうまくいきましたね、どうもありがとう! –

関連する問題