我正在努力提高Java的成绩,我遇到的一个问题是获取用户输入,所有这些都在一行中,如下所示:
System.out.println("Please input numbers that you would like to work with");
//Read in user input into ArrayList, taking into account that they may input Strings or anything else.
假设用户输入类似这样的内容
1, 2, 4, 257, 狗, 兔子, 7, #
甚至
1 2 4 257 狗兔 7
#我已经在几个地方看到了如何一次读取一个输入,但我不确定一次读取动态 ArrayList 的最佳方式。
我并不真正关心使用逗号或不带逗号的区别,因为从逻辑上讲,我认为我知道该怎么做,并且还没有尝试过,所以实际上主要问题是如上所述(当用户一次输入所有数字时,将用户输入读取到动态大小的 ArrayList 中)。 谢谢,我不一定在寻找代码,这不是家庭作业,只是想知道最好的方法。 只需从逻辑上说明它是如何完成的,但代码是值得赞赏的。
尝试这个简单的示例来打印数组列表值
import java.util.*;
class SimpleArrayList{
public static void main(String args[]){
List l=new ArrayList();
System.out.println("Enter the input");
Scanner input=new Scanner(System.in);
String a =input.nextLine();
l.add(a);
// use this to iterate the value inside the arraylist.
/* for (int i = 0; i < l.size(); i++) {
System.out.println(l.get(i));
} */
System.out.println(l);
}
}
由于我认为关于如何从System.in
读取数据有足够的答案,因此我将在这里采取不同的方法。首先,您应该意识到这不是在java中获取数据的主要方式。事实上,在10多年的时间里,我从未使用过它。这就是为什么没有完整的现成解决方案将构建的数据提供给某个容器(如 ArrayList)的原因。相反,每行只得到一个字符串。你必须自己处理这个问题。此过程称为解析。根据所选语法的复杂性,有几种方法,例如使用解析器生成器(如果它更复杂)或在更简单的情况下手动编写解析器。我想进入您的第一个建议,并将其描述为用可选空格分隔的逗号。对于这样的语法,类扫描程序提供了相当多的支持。可以识别数字,并且标记化几乎是自动完成的。但是,如果您有更具体的数据,则可能需要一些额外的努力,就像我用动物地图演示的那样,我用来转换这种非常特殊的数据类型。为了足够灵活地解决所有现实世界的问题,不可能有一个现成的解决方案。只有全面的支持才能建立自己的。
Map<String, Animal> animals = ...
Scanner scanner = new Scanner("1, 2, 4, 257, dog, rabbit, 7, #").useDelimiter(",");
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
result.add(scanner.nextInt());
} else {
String val = scanner.next();
if (animals.containsKey(val)) {
result.add(animals.get(val));
} else {
result.add(val);
}
}
}
您可以尝试使用此代码在数组列表中动态输入并存储在数组列表中
import java.util.ArrayList;
import java.util.Scanner;
public class HelloWorld
{
public static void main(String []args){
Scanner sc=new Scanner(System.in);
String j;
ArrayList l=new ArrayList();
for(int i=0;i<6;i++)
{ j=sc.nextLine();
l.add(j);
}
System.out.println("Hello World"+l);
}
}
一种方法是标记输入,然后将其添加到如下所示的数组中:
Scanner scn = new Scanner(System.in);
System.out.println("Put in a set: ");
String input = scn.nextLine();
System.out.println(input);
Scanner tokenizer = new Scanner(input);
tokenizer.useDelimiter(" ");
ArrayList<Object> arr = new ArrayList<Object>();
while(tokenizer.hasNext())
{
arr.add(tokenizer.next());
System.out.println(arr.get(arr.size()-1));
}
System.out.println(arr);