3

之前可能已经问过这个问题,如果是这样,请参考 URL。

我有一些要拆分的字符串,例如:

"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"
4

3 回答 3

0

仅当输入的其余部分中出现偶数个引号时,才由分隔符拆分:

String[] parts = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");

在 IDEOne 上查看现场演示。

于 2013-08-02T09:28:52.203 回答
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"
数字
"TEXT;VALUE"

日期
"TEXTVALUE"

于 2013-08-05T10:25:13.780 回答
0

类 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]);

    }
}

}

输出

“文本值”

数字

“文本值”

双倍的

日期

“文本值”

于 2013-08-02T08:31:10.860 回答