如何将长字符串拆分为"),"?

时间:2018-05-02 15:31:42

标签: java sql string parsing

尝试正确解析文本文件时有点头疼,它是从mysql数据库中提取的,但数据需要更改才能再次插入。

我的程序正在获取.txt文件并解析它以生成.txt文件,这很简单。

问题是它没有正确拆分文件。该文件如下所示(每个字段的中间字段看起来很奇怪,因为我已将其更改为随机字母以隐藏真实数据):

(92,'xxxname',4013),(93,'sss-xxx',4047),(94,'xxx-sss',3841),(95,'ssss',2593),(96,'ssss-sss',2587),(97,'Bes-sss',2589),

我想将其拆分,以便生成如下文件:

(92, 'xxxname',4013),

(93, 'sss-xxx', 4047),

(94, 'xxx-sss', 3841),

等等......

解析的当前代码如下:

public void parseSQL(File file) throws IOException {
    Scanner scanner = new Scanner(file);

    while (scanner.hasNext()) {
        String line = scanner.next();
        String[] lines = line.split(Pattern.quote("),"));

        for (String aLine : lines) {
            logLine(aLine);
        }
    }

}

public static void logLine(String message) throws IOException {
    PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), 
         true);
    out.println(message);
    out.close();
}

目前我得到的输出大致正常,但分裂比应该更多,当然分割方法正在删除"),"这是不必要的。

当前输出样本:

*(1,'Vdddd
Cfffff',1989
(2,'Wdd',3710
(3,'Wfffff
Hffffff
Limited-TLC',3901
(4,'ffffffun88',2714
(5,'ffffff8',1135
(6,'gfgg8*

已经玩了一段时间,并在这里和其他地方做了很多搜索但是出于想法,任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:0)

您可以使用String.replace。此外,还无需创建多个PrintWriter并每次关闭流。

public void parseSQL(File file) throws IOException {
    Scanner scanner = new Scanner(file);

    PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
    while (scanner.hasNext()) {
        String line = scanner.next();
        out.println(line.replace("),", ")," + System.lineSeparator()));
    }
    out.close();
}

答案 1 :(得分:0)

答案很简单,这一行:

String line = scanner.next(); 

应该是:

String line = scanner.nextLine();

感谢您的尝试,人们抱歉愚蠢