8

aで見つかった最初の整数を抽出する必要があり、アプローチと正規表現アプローチのどちらjava.lang.Stringを使用するかがわかりません。substring

// Want to extract the 510 into an int.
String extract = "PowerFactor510";

// Either:
int num = Integer.valueof(extract.substring(???));

// Or a regex solution, something like:
String regex = "\\d+";
Matcher matcher = new Matcher(regex);
int num = matcher.find(extract);

だから私は尋ねます:

  • ここでは、どのタイプのソリューションがより適切であり、その理由は何ですか。と
  • 部分文字列のアプローチがより適切である場合、数字の始まりを示すために何を使用できますか?
  • それ以外の場合、正規表現が適切なソリューションである場合、数値を抽出するために使用する必要がある正規表現/パターン/マッチャー/メソッドは何ですか?

注:文字列は常に単語で始まり、PowerFactorその後に負でない整数が続きます。前もって感謝します!

4

2 に答える 2

9

文字列は常に「PowerFactor」という単語で始まり、その後に負でない整数が続きます

これは、どのインデックスで番号が見つかるかを正確に知っていることを意味します。少なくとも、検索と照合の作業よりもはるかに高速なパフォーマンスを考慮すると、部分文字列を直接使用する方がよいと思います。

extract.substring("PowerFactor".length());

直接の比較は見つかりませんでしたが、2つのオプションのそれぞれについて読むことができます。

于 2013-03-25T13:26:46.380 に答える
1

少し興味があり、次のことを試しました

String extract = "PowerFactor510";
long l = System.currentTimeMillis();
System.out.println(extract.replaceAll("\\D", ""));
System.out.println(System.currentTimeMillis() - l);

System.out.println();

l = System.currentTimeMillis();
System.out.println(extract.substring("PowerFactor".length()));
System.out.println(System.currentTimeMillis() - l);

そして、2番目のテストの方がはるかに高速であることがわかったので、substring勝ちました。

于 2013-03-25T13:44:25.507 に答える