2013-08-02 15 views
3

這可能是之前問過的,如果是這樣,請僅引用該URL。如果引用了分隔字符char的Java拆分字符串

我有一些字符串,我想分割,例如:

"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

是否有任何保證它只是'「..」'而不是''「」..「'或者更多的嵌套/不均勻(轉義?)引號? – zapl

+1

[Java:分割逗號分隔的字符串但忽略引號中的逗號]的可能重複(http://stackoverflow.com/questions/1757065/java-splitting-a-comma-separated-string-but-ignoring-commas-引用) –

+0

是的,完全確保文本值被引用爲:「值」 – Wolfchamane

回答

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

    } 
} 

}

輸出

「TEXTVALUE」

NUMBER

「TEXTVALUE」

DOUBLE

日期

「TEXTVALUE」

+0

不是我想要實現的目標。 – Wolfchamane

+0

「TEXTVALUE」; NUMBER;「TEXTVALUE」; DOUBLE; DATE;「TEXTVALUE」數據在文件中? –

0

分割你的分隔符,只有當偶數報價出現在輸入的其餘他:

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

參見IDEOne一個live demo

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」