私は次のような単語シーケンスを持っています
@ ABC
@ ABCCD
@CDSFSF
@SDDSD
@SFSFS
100000 単語すべての単語シーケンスから @ 記号を削除するコードが必要です。
それを実装する最も速い方法は、もちろん、replaceFirstメソッドです。
String exampleValue = "@ CDSFSF";
long start = System.currentTimeMillis();
for (int i = 0; i < 100000 ; i++) {
exampleValue.replaceFirst("^@\\s+", "");
}
long end = System.currentTimeMillis();
System.out.println(end - start);
私のコンピューターでは約 350 ミリ秒かかります。
ただし、replaceFirstメソッドは、呼び出しごとにPatternインスタンスを作成します。
String exampleValue = "@ CDSFSF";
Pattern pattern = Pattern.compile("^@\\s+");
long start = System.currentTimeMillis();
for (int i = 0; i < 100000 ; i++) {
pattern.matcher(exampleValue).replaceFirst("");
}
long end = System.currentTimeMillis();
System.out.println(end - start);
私のコンピューターでは約 150 ミリ秒かかります。2 倍以上高速です。
ただし、すべてのケースが「@ XXXXX」のように見える場合は、単語の最初の文字を見つけて、その後の部分文字列を取得するコードを書くことができます。
String exampleValue = "@ CDSFSF";
long start = System.currentTimeMillis();
for (int i = 0; i < 100000 ; i++) {
char[] array = exampleValue.toCharArray();
int c = 0;
for (; c < array.length;c++) {
if (Character.isLetter(array[c])) {
break;
}
}
exampleValue.substring(c);
}
long end = System.currentTimeMillis();
System.out.println(end - start);
私のコンピューターでは約 30 ミリ秒かかります。最速のもの。
私があなただったら、パターンクラスで 2 番目のソリューションを使用します。シンプルで高速だからです。
すべての単語から @ を削除するには
(?<=\s|^)@
だからそうなるだろう
str.replaceAll("(?<=\\s|^)@", "");