如何在Java中使用正则表达式从第一个单词中删除@符号?

时间:2013-03-02 10:13:24

标签: java regex

我有 单词序列如

@ ABC
@ ABCCD
@CDSFSF
@SDDSD
@SFSFS

数量为100000字 我需要代码从所有单词序列中删除@符号。

3 个答案:

答案 0 :(得分:4)

你可以这样做:

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

Demo on ideone.

答案 1 :(得分: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毫秒。快两倍以上。

但是,如果您的所有案例看起来像“@ XXXXX”,您可以编写一个代码,找到单词中的第一个字母,然后获取substring

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毫秒。最快的一个。

如果我是你,我会使用Pattern类的第二个解决方案,因为它简单而快速。

答案 2 :(得分:0)

从所有单词中删除@

(?<=\s|^)@

所以它会是

str.replaceAll("(?<=\\s|^)@", "");