我做了一个小程序,在这些标志之前添加了一个空格! ?。我使用正则表达式,但我认为我的正则表达式不起作用。 我的代码
try {
BufferedReader buff = new BufferedReader(new FileReader(filePath));
BufferedWriter out1 = new BufferedWriter(new FileWriter(filePath +".txt"));
try {
String line;
String Newligne =System.getProperty("line.separator");
while ((line = buff.readLine()) != null) {
if(line.length() !=0) {
/*if (line.substring(line.length()-1, line.length()).equals("!") || line.substring(line.length()-1, line.length()).equals("?")){
line = line.substring(0,line.length()-1) + " " + line.substring(line.length()-1, line.length());
}*/
line.replaceAll("(.)([!])", "$1 $2");
out1.write(line + Newligne);
System.out.println(line);
}
}
} finally {
out1.close();
buff.close();
}
} catch (IOException ioe) {
System.out.println("Erreur --" + ioe.toString());
}
如果有人能解释我如何正确使用我的正则表达式
答案 0 :(得分:2)
字符串是immutable所以
line.replaceAll("(.)([!])", "$1 $2");
不会更改line
String的原始值,但会返回带有替换字符的新String。如果您想将line
中的值替换为replaceAll
使用
line = line.replaceAll("(.)([!])", "$1 $2");
另外,如果你想在任何!
?
之前添加空格,那么你还应该在你的正则表达式中包含?
,所以可以试试
line = line.replaceAll("([!?])", " $1");
答案 1 :(得分:1)
如果您真的只是想找到所有!
或?
,那么只需执行内部string.indexOf(...)
检查的while循环。然后,当您找到每个索引时,将最后一个位置的子字符串追加到字符前面StringBuilder
。
正则表达式是一个强大的工具,但在这种情况下,它并不会给你带来太大的好处。
答案 2 :(得分:1)
如果您想在!
或?
之前添加空格,请使用前瞻,
line = line.replaceAll("(?=[?!])", " ");
答案 3 :(得分:0)
line=line.replaceAll("(.)([!])", "$1 $2");