之前可能已经提出过这个问题,如果有的话,请参考网址。
我有一些我要拆分的字符串,例如:
"TEXTVALUE";NUMBER;"TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"
但是,经过一些读取后,在原始数据中我得到了类似的结果:
"TEXTVALUE;NUMBER;"TEXTVALUE;TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"
注意第二个文本数据,它在引号内有分割符。 我一直试图用一个模式解决这个问题,但我不知道如何实现这个目标。
可能是这样的:
string.split("["+character+"&&[^\"?[\\w*|"+character+"*]\"?]]");
或
string.split("["+character+"]&&[^\".*\"]");
这是我想要实现的输出:
"TEXTVALUE"
NUMBER
"TEXTVALUE;TEXVALUE"
DOUBLE
DATE
"TEXVALUE"
答案 0 :(得分:0)
class SplitDemo
{
public static void main(String args[])
{
String str="\"TEXTVALUE\";NUMBER;\"TEXTVALUE\";DOUBLE;DATE;\"TEXTVALUE\"";
String newSplit[] = str.split(";");
for(int i=0;i<newSplit.length;i++)
{
System.out.println(newSplit[i]);
}
}
}
<强>输出强>
“TEXTVALUE”
NUMBER
“TEXTVALUE”
DOUBLE
DATE
“TEXTVALUE”
答案 1 :(得分:0)
只有在输入的其余部分出现偶数引号时才用分隔符拆分:
String[] parts = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");
在IDEOne上查看live demo。
答案 2 :(得分:0)
如何拆分文本的简单示例如下:
public class StringSplit {
public static void main(String[] args) {
String s = "\"TEXTVALUE\";NUMBER;\"TEXT;VALUE\";DOUBLE;DATE;\"TEXTVALUE\"";
String[] strSplit = s.split(";");
/*
* first, we split the string after the ";" character then, we try to
* evaluate and see if there where any ";" characters in our text
* fields, if they where, we concatenate the strings such that to obtain
* only one
*/
StringBuilder buf = new StringBuilder();
for (int i = 0; i < strSplit.length; i++) {
int count = 0;
if (strSplit[i].charAt(0) == '\"') {
count++;
}
if (strSplit[i].charAt(strSplit[i].length() - 1) == '\"') {
count++;
}
if (count % 2 == 1) {
buf.append(strSplit[i]);
buf.append(";");
buf.append(strSplit[i + 1]);
buf.append("\n");
i++;
} else {
buf.append(strSplit[i]);
buf.append("\n");
}
}
System.out.println(buf.toString());
}
}
结果如下:
“TEXTVALUE”
NUMBER
“TEXT; VALUE”
DOUBLE
DATE
“TEXTVALUE”