【问题标题】:Java split string with splittering char avoided if quoted如果引号避免了带有拆分字符的Java拆分字符串
【发布时间】:2013-08-03 10:20:20
【问题描述】:

这可能以前有人问过,如果有,请参考网址。

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

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

【问题讨论】:

  • 是否可以保证它只是 ".." 而不是 "" .. " 或更多嵌套/不均匀(转义?)引号?
  • 是的,完全确定文本值被引用为:“value”
  • 在这里描述你对"TEXTVALUE;NUMBER;"TEXTVALUE;TEXTVALUE";DOUBLE;DATE;"TEXTVALUE"的期望值,这将有很大帮助

标签: java regex split


【解决方案1】:

类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" 数据在文件中吗?
【解决方案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());
}

}

结果如下:

“文本值”
号码
“文本;值”
双人间
日期
“文本值”

【讨论】:

    【解决方案3】:

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

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

    在 IDEOne 上查看live demo

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 2014-05-27
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多