使用Scanner.next()将String集拆分为ArrayList

时间:2012-03-28 18:50:17

标签: java arraylist java.util.scanner

我正在尝试将用户输入的集合(例如{ 1 2 3 4 })作为字符串拆分为数组列表,以便在打印出数组列表时,它将显示为{1, 2, 3, 5}。到目前为止,这是我的代码。我不确定Scanner.next()方法是如何工作的,但我试图使用它。这是我的计划的一小部分。实际上它就像一个开始。

import java.util.Scanner;
import java.util.ArrayList;
public class practice {
   public static void main (String[]args){
    Scanner stdIn = new Scanner (System.in);
    String set;
    String set2 = "";

System.out.print("Enter set:");
set = stdIn.nextLine();
if(set.charAt(0) == '{'){
    for(int i =1; i<set.length(); i++){
        set2 += set.charAt(i);
    }
}
else if(set.charAt(1) == '{'){
    for(int i = 2; i <set.length();i++){
        set2 += set.charAt(i);
    }
}
System.out.print(set2);


ArrayList<Integer> array = new ArrayList<Integer>();

while(stdIn.next() != "}"){
    set2 = stdIn.next();
    array.add(Integer.parseInt(set2));
}
System.out.print(array);

  }
}

3 个答案:

答案 0 :(得分:1)

也许您应该在字符串上使用Java的split方法。

修改 如果您需要使用扫描仪,您可能需要启动以下内容:

String input = "foobar";
Scanner s = new Scanner(input);

然后可能使用while循环和hasNext方法迭代s。在这个循环中,您可能需要使用Java的scanner api中的下一个方法之一来将每个标记用作字符串。如果你只想打印出来,那么你真的不需要为一个arraylist添加令牌。您可以直接使用System.out.print()。无论如何,非常值得自己解决这个问题并探索扫描仪api。

答案 1 :(得分:1)

您应该使用String.split(String)中的String.replaceAll(String, String)String方法来完成代码当前所做的大量工作。

您可以使用stdIn.nextLine();获取当前正在进行的用户输入,但之后,您可以更轻松地进行字符串处理。

首先,你应该删除不必要的字符,最后只有一个由空格分隔的数字序列。

您只需调用replaceAll方法即可,并提供正则表达式,在这种情况下非常简单。

然后你可以调用String.split方法来查找集合中的每个元素。

String in = stdIn.nextLine();
// Need to escape the characters because
// these characters mean something special in regular expressions
String filtered = userInput.replaceAll("(\\[\\{\\}\\],"," ");
String[] numbers = filtered.split("\\s+");
ArrayList <Integer> myNumbers = new ArrayList <Integer> ( numbers.length );
for ( String number : numbers )
    myNumbers.add ( Integer.parseInt ( number ) );

<强>更新

如果您需要使用扫描仪,则可以将扫描仪用于已过滤的字符串

Scanner s = new Scanner ( filtered );
ArrayList <Integer> myNumbers = new ArrayList < Integer > ();
while ( s.hasNext() )
{
   myNumbers.add(s.nextInt());
}

答案 2 :(得分:0)

您可以通过直接“整理”而不是实际传递然后转换字符串来缩短您的while语句,例如:

while (stdIn.next() != '}') {
    array.add(stdIn.nextInt());
}

但是,您需要进行一些错误处理,以确保实际上是为了防止用户传入其他内容。但是,如果您想将整数打印为字符串,最好使用String数组而不是Integer数组。