我遇到了将字符串插入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"};
答案 0 :(得分:2)
你不能在这里使用正则表达式;你有一个非常规的字符串。您可以使用CSV(逗号分隔值)解析器,该解析器应将字符串拆分为其组成部分。一种选择是使用Commons CSV。
另一种选择是根据语法手动解析字符串:
<line> ::= <element> {',' <element> }
<element> ::= '"' <contents> '"'
<contents> ::= { <character> | <escaped-character> }
<character> ::= * //any old character
<escaped-character> ::= '\' <character>
但实际上,使用CSV解析器会更容易。