字符串操作编码建议

时间:2015-02-24 19:25:10

标签: java arrays regex string

我有一个看起来像这样的字符串。

String line = "50464,"STRONACHLACHAR, PIER BUILDING AND PIER INCLUDING REVETMENT WALLS AND RAILINGS",C,04/05/2006,STIRLING,BUCHANAN";

如果我想将字符串拆分为6个部分以放入带

的数组
String result = line.split(",");

我会遇到一个问题,因为STRONACHLACHAR, PIER BUILDING AND PIER INCLUDING REVETMENT WALLS AND RAILINGS应该只是一个元素,因为它在""之间,但由于那里还有一个komma,它也会被分割。我也不希望"在那里。

如果我查找第一个'的位置并创建该pos + 1的子字符串,然后在该子字符串中查找另一个"并从中创建一个子字符串。

现在我有两个字符串,其中一个字符串包含第一个"之前的所有字符串,另一个字符串包含第二个"之后的字符串,字符串值为STRONACHLACHAR, PIER BUILDING AND PIER INCLUDING REVETMENT WALLS AND RAILINGS。然后我可以使用replace(",", "");替换那里的komma,也可以保存komma的位置,一旦字符串在komma上分割,就把它放回去,但是那边。接下来的行动是再次连接在一起所以我得到:

50464,STRONACHLACHAR PIER BUILDING AND PIER INCLUDING REVETMENT WALLS AND RAILINGS,C,04/05/2006,STIRLING,BUCHANAN

可以在komma上成功分割,最后我会得到一个可以使用的6个元素的数组。

在编程中,它看起来像这样。关于如何放回komma的部分。

    String line = "50464,\"STRONACHLACHAR, PIER BUILDING AND PIER INCLUDING REVETMENT WALLS AND RAILINGS\",C,04/05/2006,STIRLING,BUCHANAN";
    String end2= "";
    if(line.contains("\"")){
        int pos = line.indexOf("\"");
        String firstPart = line.substring(0, 6);
        String temp = line.substring(pos+1);
        int pos2 = temp.indexOf("\"");
        String secondPart = temp.substring(pos2+1);
        String temp2 = temp.substring(0, pos2-1);
        String temp3 = temp2.replace(",", "");
        String end = firstPart.concat(temp3);
        end2 = end.concat(secondPart);
    }
    String[] output = end2.split(",");
    for(int i = 0; i < output.length; i++){
        System.out.println(output[i] + " ");
    }

但令我疑惑的是:如果这是一个很好的编程实践,或者我觉得如何做到这一点太复杂了?由于它的1500行文件和每一行都必须进行检查。即使这样,仍然可能存在其他需要处理的违规行为。

顺便说一句,这样做的目的是所有行都应该以6个元素的数组结束,不多也不少。

我应该记住什么样的参数/想法来处理像这样的文件/行?

1 个答案:

答案 0 :(得分:2)

您的数据似乎是格式正确的逗号分隔值(CSV)行。建议重新使用http://opencsv.sourceforge.net

这样的库,而不是将自己绑在一起