Arraylist分裂 -

时间:2015-09-27 20:02:43

标签: java arraylist split

我有一个数组列表:

ArrayList<String> allText = new ArrayList<String>();

其内容如下:

[Alabama - Montgomery, Alaska - Juneau, Arizona - Phoenix, Arkansas - Little Rock, California - Sacramento, Colorado - Denver]

如何将其拆分为2个数组列表,例如:

List<String> states = new ArrayList<>(); : [Alabama, Alaska, Arizona, Arkansas]

List<String> capitals = new ArrayList<>(); : [Montgomery, Juneau, Phoenix, Little Rock]

我有这个,但它不起作用,它给我一个错误allText(扫描仪扫描仪=新扫描仪(allText);)它想要一个字符串,而不是一个arraylist:

 Scanner scanner = new Scanner(allText);

    List<String> states = new ArrayList<>();
    List<String> capitals = new ArrayList<>();

    while (scanner.hasNextLine()) {
        String[] parts = scanner.nextLine().split(" - ");
        states.add(parts[0]);
        capitals.add(parts[1]);
    }

3 个答案:

答案 0 :(得分:1)

  

它在allText上给我一个错误(扫描仪扫描仪=新的   Scanner(allText);)它想要一个字符串而不是一个arraylist

因为您将ArrayList对象传递给Scanner。但是没有这样的构造函数。

Scanner

    for(String str:allText)
    {
    String[] parts = str.split(" - ");
    states.add(parts[0]);
    capitals.add(parts[1]);
    }

需要for循环来迭代allText。由于它是List

答案 1 :(得分:0)

您正在尝试使用Scanner浏览List中的所有元素。扫描程序仅适用于单个字符串,而不是它们的列表,因为它的类型为List<String>而不是String。你想要做的是循环遍历列表中的元素:

for(String stateAndCapital : allText){
    String[] parts = stateAndCapital.split(" - ");
    states.add(parts[0]);
    capitals.add(parts[1]);
}

答案 2 :(得分:0)

我会使用String.split(String)(其中参数是正则表达式,\\s+是一个或多个空格。如果它应该是可选的空格,则可以使用\\s*)。然后将资本和状态添加到它的相应列表中。然后我会用格式化的IO显示它们。使用Java 7+,您可以使用diamond operator。像

这样的东西
List<String> allText = Arrays.asList("Alabama - Montgomery",
        "Alaska - Juneau", "Arizona - Phoenix",
        "Arkansas - Little Rock", "California - Sacramento",
        "Colorado - Denver");
List<String> states = new ArrayList<>();
List<String> capitals = new ArrayList<>();
for (String both : allText) {
    String[] arr = both.split("\\s+-\\s+");
    states.add(arr[0]);
    capitals.add(arr[1]);
}
for (int i = 0; i < states.size(); i++) {
    String state = states.get(i);
    String capital = capitals.get(i);
    System.out.printf("The capital of %s is %s%n", state, capital);
}