2

我的代码:

String stringTxt = "Hello World!!";
String negatorStr = "Loop";
String regexToUse="["+negatorStr.toLowerCase()+negatorStr.toUpperCase()+"]";
System.out.println(stringTxt.replaceAll(regexToUse, ""));


正如您从代码中看到的那样,目标是将“L”或“O”或“P”替换为“”(空)。并且代码negatorStr通过以小写和大写形式表示,并在“[”,“]”中组合将其转换为兼容的正则表达式,从而使其不区分大小写replaceAll()

问题:有没有其他方法可以使negatorStr大小写不敏感,以便我可以在 中使用它replaceAll()

4

4 回答 4

3

在正则表达式的开头使用(?i)以使其不区分大小写。

这将是

String regexToUse = "(?i)[" + negatorStr + "]";

您可以在类的字段摘要中查看其他可能的标志Pattern

于 2013-07-30T15:24:58.133 回答
2

是的,有两种方法。

要么使用内联标志:

final String replaced = myString.ReplaceAll("(?i)[lop]", "");

或者使用带有显式标志的Patternand :Matcher

final Pattern p = Pattern.compile("[lop]", Pattern.CASE_INSENSITIVE);
final String replaced = p.matcher("Hello World!!").replaceAll("");

输出:

He Wrd!!
He Wrd!!
于 2013-07-30T15:28:26.823 回答
1

您可以(?i)在您的正则表达式中使用或使用 Pattern 和Pattern.CASE_INSENSITIVE 标志

String regexToUse = "[" + negatorStr.toLowerCase() + "]";
Pattern p = Pattern.compile(regexToUse, Pattern.CASE_INSENSITIVE);
System.out.println(p.matcher(stringTxt).replaceAll(""));

如果您用相同的模式替换多个字符串,则后者是有意义的,否则前者会更短。

于 2013-07-30T15:26:41.963 回答
0

目标是将“L”或“O”或“P”替换为“”(空)

String stringTxt = "Hello World!!";
System.out.println(stringTxt.replaceAll("(?i)(l|o|p)", ""));
于 2013-07-30T15:27:37.047 回答