2012-07-13 79 views
0

我有一個行的純文本,它包含了一系列的加號分隔標籤:在Java中,如何將單個字段的多個值解析爲String數組?

event name @location +tag1 +tag2 +tag3 +tag4

的數據字段送花兒給人sappear以相同的順序:名稱,位置,標籤。總是隻有一個名稱和位置的實例,但可以有一個或多個標籤。我希望能夠複製Java中的.NET StringSplit方法(將所有分隔字符串寫入數組),但似乎無法繞過我的頭。

從上面的例子中爲標籤字段我所需的輸出將是:

tag[0] = tag1 
tag[1] = tag2 
tag[2] = tag3 
tag[3] = tag4 

首先,我能找到最接近的方法是split其使用正則表達式。但我不知道如何將正則表達式編碼到EXCLUDE中的任何字符第一+。

我想在特定行中獲得+的計數,並使用for循環來解析並創建tagString[count-of-plusses],但是會在單行上跨多個+nnnnn實例嗎?

任何建議在一個很好的方法來解決這個問題?

回答

1

如果你看的javadoc爲String明確:

public String[] split(String regex) 

這將允許您分割周圍任何你喜歡的字符串,並返回一個字符串數組。

您也可以將此方法的版本與limit參數一起使用。首先使用它可以讓你擺脫所有的東西,然後在沒有limit參數的情況下再次執行。

0

使用String方法indexOf()和subString()來獲取字符串的相關部分,即丟棄第一個+之前的所有內容。

然後使用split()以+作爲分隔符和trim()放棄空格來處理此子字符串。

2

您可以分割字符串,並返回數組複製,而不第一個項目:

String s ="event name @location +tag1 +tag2 +tag3 + 
String[] items = s.split("\\+"); 

//remove the `event name @location` part 
String[] tags = new String[items.length - 1]; 
System.arraycopy(items, 1, tags, 0, items.length - 1); 

請務必添加相關的完整性檢查(項目是> 1,例如長度)。

0

擺脫第一個+之前的字符只是忽略數組中的第一個項目。

String input = "+tag1+tag2+tag3+tag4"; 
    String[] splitted = input.split("\\+");  
    System.out.println(Arrays.toString(splitted)); 
    //returns [, tag1, tag2, tag3, tag4] 

    input = "xxx+tag1+tag2+tag3+tag4"; 
    splitted = input.split("\\+");  
    System.out.println(Arrays.toString(splitted)); 
    //returns [xxx, tag1, tag2, tag3, tag4] 
0
input.split(" +")[1]  // you have "tag1 +tag2 +tag3 +tag4" now 
    .split("\\s+\\+"); // you have {tag1, tag2, tag3, tag4} now 
+1

這是很難添加與語法檢查(即,你會得到一個IndexOutOfBoundsException異常,如果沒有'「+」'在原始字符串)。 – assylias 2012-07-13 15:58:46

+0

Hmz,你是對的:D – Lopina 2012-07-13 16:03:13

0

托盤這個

 String string = "event name @location +tag1 +tag2 +tag3 +tag4";       
     String[] ss = string.split(" "); 
     String[] tag = new String[ss.length - 3]; 
     for (int i = 3 ; i < ss.length; i++) { 
      tag[i-3] = ss[i].replace("+", ""); 
     } 
相關問題