我有一个数组列表:
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]);
}
答案 0 :(得分:1)
它在allText上给我一个错误(扫描仪扫描仪=新的 Scanner(allText);)它想要一个字符串而不是一个arraylist
因为您将ArrayList
对象传递给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);
}