1

私は次のような単語シーケンスを持っています

@ ABC
@ ABCCD
@CDSFSF
@SDDSD
@SFSFS

100000 単語すべての単語シーケンスから @ 記号を削除するコードが必要です。

4

3 に答える 3

4

あなたはこれを行うことができます:

str = str.replaceAll("^@", "");

ideone のデモ。

于 2013-03-02T10:15:06.700 に答える
1

それを実装する最も速い方法は、もちろん、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 番目のソリューションを使用します。シンプルで高速だからです。

于 2013-03-02T10:44:22.547 に答える
0

すべての単語から @ を削除するには

(?<=\s|^)@

だからそうなるだろう

str.replaceAll("(?<=\\s|^)@", "");
于 2013-03-02T10:17:33.573 に答える