在符号前放置一个空格(!?)

时间:2014-08-05 13:07:02

标签: java regex replace

我做了一个小程序,在这些标志之前添加了一个空格! ?。我使用正则表达式,但我认为我的正则表达式不起作用。 我的代码

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());
}

如果有人能解释我如何正确使用我的正则表达式

4 个答案:

答案 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");