建议使用方法replaceAll

时间:2015-05-20 13:23:47

标签: java string replaceall

我需要替换Java字符串中的文本实例,我目前正在使用replaceAll方法,如下所示:

    String originalText = ("The City of London has existed for approximately 2000 years and the City of London remains to this day.");
    String originalKeyword = ("City of London");
    String revisedKeyword = ("");
    if (String_Utils.getLengthOfKeyword(originalKeyword) > 1) {
        revisedKeyword = String_Utils.removeChar(originalKeyword, ' ');
    }
    else {
        revisedKeyword = originalKeyword;        
    }        
    String revisedText = originalText.replaceAll(originalKeyword, revisedKeyword);        
    System.out.println("Original text: " + originalText);
    System.out.println("Revised text: " + revisedText);
    System.out.println("Original keyword: " + originalKeyword);
    System.out.println("Revised keyword: " + revisedKeyword);

上述目的是保存原始关键字的修订版本,不含空格,如果关键字中的单词数量多于1,则替换字符串中原始关键字的所有实例。

鉴于这将是一个批处理操作,有没有人知道是否有更好的方法来批量替换Java字符串中的文本?或者replaceAll是否有任何陷阱?

3 个答案:

答案 0 :(得分:0)

String originalText = ("The City of London has existed for approximately 2000 years and the City of London remains to this day.");
String originalKeyword = ("City of London");
String revisedKeyword = ("");

“保存原始关键字的修订版本,不含空格”

String newVersion = new String(originalKeyword);
revisedKeyword = newVersion.replaceAll(" ","");

“如果关键字中的单词数量多于一个,则替换字符串中原始关键字的所有实例。”

int lengthWord = originalKeyword.split(" ").length;
if(lengthWord > 0){ 
    originalText.replaceAll(originalKeyword , revisedKeyword);
}

答案 1 :(得分:0)

    public static void main(String[] args) {


        String originalText = ("The City of London has existed for approximately 2000 years and the City of London remains to this day.");
        String originalKeyword = ("City of London");
        String revisedKeyword = ("");

        String[] arr = originalText.split(originalKeyword);
        String newString = "";

        for(int i = 0 ; i < arr.length ; i += 2) {

            if(i < (arr.length -1)) {
                newString += arr[i] + revisedKeyword + arr[i+1];
            }
            else {
                newString +=  revisedKeyword + arr[i];
            }
        }
        System.out.println(newString);
}

此处newString正是您要找的。

答案 2 :(得分:0)

请注意,在内部,replaceAll()使用已编译的模式来匹配收到的字符串。如果您希望在不同的原始文本中替换相同的关键字,您可能希望首先缓存已编译的模式。如果它只是一次性的话,replaceAll()似乎很好 更快的实现将涉及从包含原始文本的字符数组实现替换方法,手动识别每个子字符串并替换它。 另一种可能的方法是使用StringBuilder,跟踪上一个匹配的内部索引,并使用replace()直接替换关键字。任何可以避免由Pattern和字符串的不变性引起的开销的东西。

但是,必须对这些进行基准测试以确定真正的需求。对于您提出的案例,replaceAll()可能会表现得非常好。