2

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 %ssdn

なぜ車輪の再発明をして、ただ使うのかというあなたの質問を知っています。String.format()私はこれを頭に入れて、それを解決するまで他に何もできないというだけのはずです。

java.util.Formatterクラスの正規表現もコピーして貼り付けてみ
"%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])"ましたが、上記と同じで、%sまたはに対してのみ機能しました%9s

また、Formatterクラスで、開発者がMatcherクラスのインスタンスとPaternクラスのインスタンスを使用し、forループを使用してStringを実行し、パターンの各インスタンスを照合してArrayListに格納していることに気付きました。私は本当にそれをしたくありません。String引数に%nor%sまたはorのインスタンスが1つあるかどうかを確認したいだけです。%dそれを、後で.と組み合わせて使用​​するStringに格納しString.format(format, argument);ます。

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

4

1 に答える 1

3

これを試して

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

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

于 2012-04-05T20:49:21.290 に答える