Java:棘手的替换String

时间:2014-02-13 21:45:18

标签: java string

我遇到了将字符串插入String []数组的问题。我有以下字符串:

12343,"Den Haag, Willem de Zwijgerlaan",lol,"HI",ZF-32,"TZ,45,38" 

或者例如这个字符串:

"Another String",44,33,"TZ,38",ok

这只是我的应用程序渗透的数百万个字符串中的一个。问题是这种情况下的分隔符是,字符。然而,它有时被烘焙到其中一个领域。

现在您可以看到"Den Haag, Willem de Zwijgerlaan"有该字符,但这属于该字段,不能算作分隔符。

我提出了以下代码,我被困住了。

String before = "12343,\"Den Haag, Willem de Zwijgerlaan\",DH1,\"HI\",ZF-32,\"TZ,45,38\"";
System.out.println(before);

int first = before.indexOf("\"");

if(first != -1) {
    Boolean firstTime = true;
    int firstPos = 0;
    int secondPos = 0;

    for (int i = -1; (i = before.indexOf("\"", i + 1)) != -1; ) {
        if(firstTime) {
            firstPos = i;
            firstTime = false;
        } else {
            secondPos = i;
            System.out.println(before.substring(firstPos+1, secondPos));
            firstTime = true;
        }
    }           
}

这导致:

12343,"Den Haag, Willem de Zwijgerlaan",lol,"HI",ZF-32,"TZ,45,38"
Den Haag, Willem de Zwijgerlaan
HI
TZ,45,38

我希望String []数组看起来像这样:

String[] array = {"12343", "Den Haag, Willem de Zwijgerlaan", "lol", "HI", "ZF-32", "TZ,45,38"};

1 个答案:

答案 0 :(得分:2)

你不能在这里使用正则表达式;你有一个非常规的字符串。您可以使用CSV(逗号分隔值)解析器,该解析器应将字符串拆分为其组成部分。一种选择是使用Commons CSV

另一种选择是根据语法手动解析字符串:

<line>              ::= <element> {',' <element> }
<element>           ::= '"' <contents> '"'
<contents>          ::= { <character> | <escaped-character> }
<character>         ::= *  //any old character
<escaped-character> ::= '\' <character>

但实际上,使用CSV解析器会更容易。