2009-07-07 22 views

答えて

14

sはStringであると仮定します。

s.replaceAll("N/A", "0"); 

正規表現は必要ありません。これで十分です:

s.replace("N/A", "0"); 
8

なぜ正規表現を使うのですか?あなたがパターンを必要としない場合は、単にreplaceを使用します。

String output = input.replace("N/A", "0"); 
+0

Java APIは、最初の引数を正規表現として記述します。したがって、質問の形式。 – SteveT

+1

@SteveT:はい、私の主張は、 'replaceAll'を全く使う必要がないということです。 –

+0

ああ、ありがとう。あなたが提案した別の方法に気付かなかった。それは知って良いです。 – SteveT

0

あなたは高速なコードを試すことができます。文字列のみN/Aが含まれている場合:

return str.equals("N/A") ? "0" : str; 

文字列は、複数のN/Aが含まれている場合:

は(参加
return join(string.split("N/A"), "0") 
      + (string.endsWith("N/A") ? "0" : ""); 

の方法であって、

private String join(String[] split, String string) { 
    StringBuffer s = new StringBuffer(); 
    boolean isNotFirst = false; 
    for (String str : split) { 
     if (isNotFirst) { 
      s.append(string); 
     } else { 
      isNotFirst = true; 
     } 
     s.append(str); 
    } 
    return s.toString(); 
} 

それが2倍になりますas fast

+0

あなたのコードは正しく動作すると仮定しますが、 'split()'と 'join()'を呼び出す方が 'replace()'やregexよりも速いと思いますか? – Nayuki

+0

大きなデータセットでテストしました。残念ながら、テストは失われました。私はあなたがJavaの新しいバージョンで新しいテストを行うことができると思います。その結果を見るのは面白いだろう。私はあなたを助けてうれしい。 – Koss