我试图将用户输入的集合(例如 { 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);
}
}
最佳答案
您应该在 String
中使用 String.split(String)
和 String.replaceAll(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 ) );
更新
如果需要使用扫描器,可以对已经过滤的String使用扫描器
Scanner s = new Scanner ( filtered );
ArrayList <Integer> myNumbers = new ArrayList < Integer > ();
while ( s.hasNext() )
{
myNumbers.add(s.nextInt());
}
关于java - 使用 Scanner.next() 将 String 集合拆分为 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913850/