2011-03-07 37 views
0

我有一個包含固定值字段的大字符串,這組字段可以重複0到40次。我想將這個列表解析爲一個數組列表,但我不確定這樣做的最佳方式?如何在java中將字符串解析爲arraylist?

的字符串數據如下,

CountryCode = 2 character 
StateProv = 7 characters 
PostalCode = 10 characters 
BuildingNum = 5 characters 

沒有定界符圖案只是重複

任何建議?

+1

你可能需要一個地圖,而不是一個列表 – adarshr 2011-03-07 17:05:08

+1

是字符串數據完全像您發佈/每個值之間的新的生產線? – 2011-03-07 17:07:01

+0

給出了示例輸入和預期結果 – smas 2011-03-07 17:28:18

回答

5

我可能只是重複讀子:(或迴路中的巴迪,或任何...點主要是你有串進行解析)

private static final int PATTERN_LENGTH = 24; 
.... 

List<Location> list = new ArrayList<Location>(); 

if (text.length() % PATTERN_LENGTH != 0) 
{ 
    // throw an exception of some description; you haven't got valid data 
} 
for (int start = 0; start < text.length(); start += PATTERN_LENGTH) 
{ 
    list.add(Location.parse(text.substring(start, start + PATTERN_LENGTH)); 
} 

+0

@ Jon,你能否在'ideone.com'中提供一個例子,以便它可以方便地進一步參考。在這裏可以理解這個例子。 – Deepak 2011-03-07 17:30:33

+0

@Deepak,這個例子看起來很清楚,你可以擴展什麼是混淆? – jzd 2011-03-07 17:31:34

+0

@Deepak:你不明白哪個部分? – 2011-03-07 18:57:45

0

我嘗試過使用字符數組。我確信它可以進行優化,我希望看到可以應用哪些更改以使其更快。下面是我的測試:

public class Test { 

public static String bigString = "USARIZONA85123-123477777USWASHING78987-458711111USCOLORAD11111-111133333"; 

public List<String> getValues() { 
    List<String> seperatedValues = new ArrayList<String>(); 

    char[] bigStringArray = bigString.toCharArray(); 
    char[] temp = new char[24]; 
    int j = 0; 

    for (int i=1; i < bigStringArray.length+1; i++) { 
     temp[j] = bigStringArray[i-1]; 
     j++; 
     if (i%24 == 0) { 
      seperatedValues.add(String.valueOf(temp)); 
      temp = new char[24]; 
      j = 0; 
     } 
    } 

    return seperatedValues; 
} 

public static void main(String[] args) { 
    Test test = new Test(); 
    System.out.println(test.getValues()); 
} 

}

+0

爲什麼要把字符串複製到一個數組開始?只需使用String.substring,它不會複製字符。 – 2011-03-08 11:53:46