我正在尝试将用户输入的集合(例如{ 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);
}
}
答案 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数组。