2014-09-19 74 views
0

我正在掃描一組String對象,每個字符串對象將被分解爲一個正則表達式。您可以將Java Retval放入數組

當通過一個增強的for-loop我想知道,是否有可能將retval放入數組中?

例如,如果我有字符串regex = new String [3];

當正則表達式[0] = 「EVEN_BIN_NUM(0 | 1)* 0」

增強的for循環可以打破我的字符串對象成EVEN_BIN_NUM和(0 | 1)* 0

我希望能夠將EVEN_BIN_NUM放入一個數組中,並將(0 | 1)* 0放入另一個數組中。這裏是我有通過與字符串的字符串數組掃描對象

/* 
    * Run through each String object and appropriately place them in the kind, 
    * and explicit. 
    */ 
    for (int j = 0; j < regex.length; j++) 
    { 
     for (String retval: regex[j].split(" ", 2)) 
     { 
      System.out.println(retval); 
     } 
    } 

對於正則表達式[0] .split(」」,2)I得到EVEN_BIN_NUM和代碼(0 | 1)* 0分別返回。

或者,如果你知道如何以更好的方式打破這件事,讓我知道: EVEN_BIN_NUM(0 | 1)* 0

ODD_BIN_NUM(0 | 1)* 1個

PET(貓|狗)

大寫字母的部分要放在「kind」數組中,其餘部分放在另一個數組中。

所以這種類型的數組會有三個字符串,而另一個數組會有三個字符串。

但願這不是太混亂....

+0

您最終將需要某種方式來識別您在for循環的循環哪一個元素,所以只寫一個正常循環,並分配返回值到相應的陣列。 – nhahtdh 2014-09-19 04:05:10

回答

0

這可能是使用一個Map對象來存儲你的信息,但是,如果你想返回您分析作爲一個數組是一個好主意,你可以返回一個數組數組,並執行以下操作。

String[] regex = {"EVEN_BIN_NUM (0|1)*0", "ODD_BIN_NUM (0|1)*1", "PET (cat|dog)"} ; 
String[][] split = new String[regex.length][]; 

for(int i = 0; i < regex.length; i++) { 
    split[i] = regex[i].split(" ", 2); 

} 

然後,您可以訪問數據如下

String firstProperty = split[0][0]; //EVEN_BIN_NUM 
String firstRegex = split[0][1];  //(0|1)*0 

String secondProperty = split[1][0]; //ODD_BIN_NUM 
String secondRegex = split[1][1];  //(0|1)*1 

等等。

或使用地圖:

Map<String, Pattern> map = new HashMap<>(); 

for(int i = 0; i < regex.length; i++) { 
    String[] splitLine = regex[i].split(" ", 2); 
    map.put(splitLine[0], Pattern.compile(splitLine[1])); 

} 

這樣,你的性能將直接映射到您的模式。

例如:

Pattern petPattern = map.get("PET");