从程序中删除了空格,但需要在一个点上有空格

时间:2014-08-14 17:25:47

标签: java regex string

我有一个输入文件,如下所示:

  

059790355;61033755;026466086;19 ;NOMBRE GENERICO APELLIDO GENERICO ;BAA;1CXX;1;2013-04-12;2014-02-12;352082056559802 ;

当我运行程序时,我得到输出:

  

059790355;61033755;026466086;19;NOMBREGENERICOAPELLIDOGENERICO;BAA;1CXX;1;2013-04-12;2014-02-12;352082056559802;

但我要求输出为:

  

059790355;61033755;026466086;19;NOMBRE GENERICO APELLIDO GENERICO;BAA;1CXX;1;2013-04-12;2014-02-12;352082056559802;

name属性应该有空格。 我的节目是:

{
    System.out.println("Usage: APP <INPUT_FILE> <OUTPUT_FILE>");
    return;
}
    try {

        File fout = new File(args[1]);
        FileOutputStream fos = new FileOutputStream(fout);

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));

        File file = new File(args[0]);
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        StringBuffer stringBuffer = new StringBuffer();     
        String line= bufferedReader.readLine();

        while ((line = bufferedReader.readLine()) != null) {

            line = line.trim();    
            line = line.replaceAll("\\s+", "");
                bw.write(line);

            bw.newLine();
        }

        bw.close();
        fileReader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以替换分号周围的所有空格:

line=line.replaceAll("\\s*;\\s*", ";");

这会将foo; bar baz; 42 ;之类的字符串转换为foo;bar baz;42;

答案 1 :(得分:0)

使用此正则表达式替换:

line = line.replaceAll("\\s+(?!\w)", "");

它替换了所有空格,后面没有单词字符(数字或字母或下划线)。

此外,删除line = line.trim();,因为正则表达式将处理它,所以不需要它。

这是regex demo