我有这种方法,它可以按预期工作:
public void splitReplaceAndPrint()
{
words = new String[200];
String bookReplacedWithNoCommas = book.replaceAll(",", "");
words = bookReplacedWithNoCommas.split(" ");
for(int i = 0; i < words.length; i++)
{
System.out.println(words[i]);
}
}
但如果我试图删除这些点,就像这样......:
public void splitReplaceAndPrint()
{
words = new String[200];
String bookReplacedWithNoCommas = book.replaceAll(",", "");
String bookReplacedWithNoPoints = bookReplacedWithNoCommas.replaceAll(".", "");
words = bookReplacedWithNoPoints.split(" ");
for(int i = 0; i < words.length; i++)
{
System.out.println(words[i]);
}
}
......什么都没打印出来。为什么这不起作用?
答案 0 :(得分:7)
因为.
意味着什么,所以逃避它。
.
将匹配任何字符,因此它将替换字符串中的所有内容,因此您应该利用replace
代替昂贵的正则表达式
book.replace(",", "");
或
同时删除,
和.
book.replaceAll("[.,]", "");
[.,]
:[]
表示character class
,表示与逗号和点匹配
以防万一,如果您想使用replace
删除单个字符,那么您可以将replace
函数链应用为
String book ="The .bo..ok of ,eli..";
book.replace(",","").replace(".",""); // The book of eli
答案 1 :(得分:3)
你需要逃避点,否则,它将匹配任何角色。这种转义是必要的,因为replaceAll
将第一个参数视为正则表达式。您案例中replaceAll
的第一个参数应该是\\.
而不是.
,即
String bookReplacedWithNoPoints = bookReplacedWithNoCommas.replaceAll("\\.", "");