Java拆分字符串,如果引用,则避免拆分字符

Java拆分字符串,如果引用,则避免拆分字符,java,regex,split,Java,Regex,Split,这可能是以前问过的,如果是,请参考URL 我有一些要拆分的字符串,例如: "TEXTVALUE";NUMBER;"TEXTVALUE";DOUBLE;DATE;"TEXTVALUE" 但是,在一些行读取之后,在原始数据中,我得到了如下结果: "TEXTVALUE;NUMBER;"TEXTVALUE;TEXTVALUE";DOUBLE;DATE;"TEXTVALUE" 注意第二个文本数据,它在引号内有拆分符。 我一直试图用一种模式来解决这个问题,但我不确定如何实现这一点 可能是这样的: str

这可能是以前问过的,如果是,请参考URL

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

"TEXTVALUE";NUMBER;"TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"
但是,在一些行读取之后,在原始数据中,我得到了如下结果:

"TEXTVALUE;NUMBER;"TEXTVALUE;TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"
注意第二个文本数据,它在引号内有拆分符。 我一直试图用一种模式来解决这个问题,但我不确定如何实现这一点

可能是这样的:

string.split("["+character+"&&[^\"?[\\w*|"+character+"*]\"?]]");

这是我试图实现的输出:

"TEXTVALUE"
NUMBER
"TEXTVALUE;TEXVALUE"
DOUBLE
DATE
"TEXVALUE"
类拆分演示

{

publicstaticvoidmain(字符串参数[])
{
String str=“\'TEXTVALUE\”数字;\'TEXTVALUE\”双精度;日期;\'TEXTVALUE\”;
字符串newSplit[]=str.split(“;”);

对于(int i=0;i仅当输入的其余部分中出现偶数引号时,才由分隔符拆分:

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

请参阅IDEOne上的一个示例。

如何拆分文本的简单示例如下:

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());
}
公共类StringSplit{
公共静态void main(字符串[]args){
字符串s=“\”文本值\”数字;\”文本;值\”双精度;日期;\”文本值\”;
字符串[]strSplit=s.split(“;”);
/*
*首先,我们在“;”字符后拆分字符串,然后,我们尝试
*评估并查看文本中是否有“;”字符
*字段,如果它们位于何处,我们将字符串连接起来,以获得
*只有一个
*/
StringBuilder buf=新的StringBuilder();
对于(int i=0;i
}

结果如下:

“文本值”
数字
“文本;值”
双倍
日期

“TEXTVALUE”

是否可以保证它只是
。“
而不是像
”…“
或更多嵌套/不均匀(转义?)的引号?可能是重复的,完全确定文本值引用为:“value”在这里描述
“TEXTVALUE;NUMBER;”TEXTVALUE;TEXTVALUE;DOUBLE;DATE;”TEXTVALUE“的预期值”
,这将有助于实现我试图实现的目标。“TEXTVALUE”数字;“TEXTVALUE”双精度;日期;“TEXTVALUE”数据是否在文件中?
String[] parts = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");
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());
}