Java ArrayList,在一行中获取多种类型(int、String等)的用户输入

Java ArrayList,在一行中获取多种类型(int、String等)的用户输入,java,arrays,arraylist,user-input,Java,Arrays,Arraylist,User Input,我正在努力让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,

我正在努力让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,4257,狗,兔子,7#

甚至

1 2 4 257狗兔7#

我在几个地方见过如何一次读取一个输入,但我不确定一次读取动态ArrayList的最佳方法


我并不真正关心使用逗号与不使用逗号的区别,因为从逻辑上讲,我认为我知道如何使用逗号,而且还没有尝试过,所以真正的主要问题是如上所述(当用户同时输入所有数字时,将用户输入读入动态大小的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);

            }

        }
import java.util.*;
类SimpleArrayList{
公共静态void main(字符串参数[]){
列表l=新的ArrayList();
System.out.println(“输入”);
扫描仪输入=新扫描仪(System.in);
字符串a=input.nextLine();
l、 添加(a);
//使用此选项迭代arraylist中的值。
/*对于(int i=0;i
一种方法是标记输入,然后将其添加到如下数组中:

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.

Scanner scn=新扫描仪(System.in);
System.out.println(“放入一组:”);
字符串输入=scn.nextLine();
系统输出打印项次(输入);
扫描仪标记器=新扫描仪(输入);
标记器.useDelimiter(“”);
ArrayList arr=新的ArrayList();
while(tokenizer.hasNext())
{
arr.add(tokenizer.next());
System.out.println(arr.get(arr.size()-1));
}
系统输出打印项次(arr);

因为我认为关于如何从
系统读取数据有足够的答案。在
中,我将采用不同的方法。首先,您应该知道,这不是java中获取数据的主要方式。事实上,十多年来我从未使用过它。这就是为什么没有一个完整的现成的解决方案来将结构化数据提供给某个容器(比如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);
      }
    }
  }
Map动物=。。。
Scanner Scanner=新扫描仪(“1,2,4,257,dog,rabbit,7,#”)。使用分隔符(“,”;
while(scanner.hasNext()){
if(scanner.hasNextInt()){
添加(scanner.nextInt());
}否则{
String val=scanner.next();
if(动物。容器(val)){
结果.添加(动物.获取(val));
}否则{
结果:添加(val);
}
}
}

您可以尝试使用此代码在arraylist中以友好方式获取输入并存储在arraylist中

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);
 }
}
import java.util.ArrayList;
导入java.util.Scanner;
公共类HelloWorld
{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
字符串j;
ArrayList l=新的ArrayList();

对于(int i=0;i您必须将每个条目读取为字符串。之后,您可以将它们转换为正确的类型,可能是通过检查它们是否为数字。如果您想将它们全部存储在一个数组中,您可以创建一个
ArrayList
,但这取决于您的用例。感谢链接,这完美地回答了问题的这一部分。所有3个答案都是正确的低是伟大的,我只是选择了一个最简单的逻辑遵循(对我来说)。真的感谢你的帮助。