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

标签 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);

  }
}

最佳答案

您应该在 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/

相关文章:

java - 使用特定缓冲区大小的分块传输编码在 Jetty 中传输缓慢

java - 如果文件存在,如何锁定它而不创建它?

java - Hibernate saveOrUpdate() 似乎没有级联创建和保存

java - (Java/netty) 使用 Netty 发送和接收可变大小对象的最简单方法是什么?

java - 阻止扫描仪读取用户输入java?

java - Array List .remove 函数不会完全删除元素,在 JTable 中留下空白空间

java - 为什么我的 ArrayList 没有循环遍历所有值?

java - 如何对 arrayList 中的值求和

java扫描仪.nextLine错误: no line found

java - 当字符串变量的输入前面有整数输入时,该输入将被跳过