我需要替换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
是否有任何陷阱?
答案 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
正是您要找的。 p>
答案 2 :(得分:0)
请注意,在内部,replaceAll()
使用已编译的模式来匹配收到的字符串。如果您希望在不同的原始文本中替换相同的关键字,您可能希望首先缓存已编译的模式。如果它只是一次性的话,replaceAll()
似乎很好
更快的实现将涉及从包含原始文本的字符数组实现替换方法,手动识别每个子字符串并替换它。
另一种可能的方法是使用StringBuilder,跟踪上一个匹配的内部索引,并使用replace()
直接替换关键字。任何可以避免由Pattern
和字符串的不变性引起的开销的东西。
但是,必须对这些进行基准测试以确定真正的需求。对于您提出的案例,replaceAll()
可能会表现得非常好。