2011-03-07 42 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