如果引用,则避免使用带分裂字符的Java拆分字符串

时间:2013-08-02 08:12:51

标签: java regex split

之前可能已经提出过这个问题,如果有的话,请参考网址。

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

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

3 个答案:

答案 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”