在下面的例子中,我如何忽略大小写?
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));示例:
输入:
inText = "Retail banking Wikipedia, the free encyclopedia Retail banking "
+ "From Wikipedia. retail banking industry."
word = "retail banking"输出
outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " +
"From Wikipedia. retail~banking industry."发布于 2011-04-07 07:25:31
若要执行不区分大小写的搜索和替换,可以更改
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));转到
outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~"));避免破坏原来的大写:
然而,在上面的方法中,您正在破坏替换单词的大写。以下是一个更好的建议:
String inText="Sony Ericsson is a leading company in mobile. " +
"The company sony ericsson was found in oct 2001";
String word = "sony ericsson";
Pattern p = Pattern.compile(word, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inText);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String replacement = m.group().replace(' ', '~');
m.appendReplacement(sb, Matcher.quoteReplacement(replacement));
}
m.appendTail(sb);
String outText = sb.toString();
System.out.println(outText);输出:
Sony~Ericsson is a leading company in mobile.
The company sony~ericsson was found in oct 2001发布于 2011-04-06 14:38:49
在进行搜索之前,您可以将其全部转换为小写,或者查看正则表达式修饰符Pattern.CASE_INSENSITIVE。
发布于 2012-11-19 01:27:39
以下是我的做法:
private String replaceAllIgnoreCase(final String text, final String search, final String replacement){
if(search.equals(replacement)) return text;
final StringBuffer buffer = new StringBuffer(text);
final String lowerSearch = search.toLowerCase(Locale.CANADA);
int i = 0;
int prev = 0;
while((i = buffer.toString().toLowerCase(Locale.CANADA).indexOf(lowerSearch, prev)) > -1){
buffer.replace(i, i+search.length(), replacement);
prev = i+replacement.length();
}
return buffer.toString();
}在我看来是完美无缺的。用我的方式来做它的好处是,在我的解决方案中没有正则表达式,这意味着如果您想替换一个括号或加号(或任何其他元字符),它实际上将取代它的实际内容,而不是它在regex中的含义。希望这能帮上忙。
https://stackoverflow.com/questions/5568081
复制相似问题