Java从单行读取多个int

时间:2014-05-06 23:52:30

标签: java input java.util.scanner

我正在处理一个程序,我希望允许用户在出现提示时输入多个整数。我曾尝试使用扫描仪,但我发现它只存储用户输入的第一个整数。例如:

输入多个整数:1 3 5

扫描仪只能获得第一个整数1.是否可以从一行获得所有3个不同的整数,并且以后能够使用它们?这些整数是我需要根据用户输入操作的链表中数据的位置。我无法发布我的源代码,但我想知道这是否可行。

18 个答案:

答案 0 :(得分:21)

我一直在hackerearth上使用它

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String  lines = br.readLine();    

    String[] strs = lines.trim().split("\\s+");

    for (int i = 0; i < strs.length; i++) {
    a[i] = Integer.parseInt(strs[i]);
    }

答案 1 :(得分:8)

您希望将数字作为字符串输入,然后使用String.split(" ")获取3个数字。

String input = scanner.nextLine();    // get the entire line after the prompt 
String[] numbers = input.split(" "); // split by spaces

数组的每个索引都将保存数字的字符串表示形式,int可以使Integer.parseInt()成为{{1}}

答案 2 :(得分:8)

Scanner有一个名为hasNext()的方法:

    Scanner scanner = new Scanner(System.in);

    while(scanner.hasNext())
    {
        System.out.println(scanner.nextInt());
    }

答案 3 :(得分:8)

试试这个

public static void main(String[] args) {
    Scanner in = new Scanner(System.in); 
    while (in.hasNext()) {
        if (in.hasNextInt())
            System.out.println(in.nextInt());
        else 
            in.next();
    }
}

默认情况下,扫描程序使用分隔符模式“\ p {javaWhitespace} +”,它至少匹配一个空格作为分隔符。你不必做任何特别的事。

如果要匹配空格(1或更多)或逗号,请将扫描程序调用替换为

Scanner in = new Scanner(System.in).useDelimiter("[,\\s+]");

答案 4 :(得分:5)

如果您知道将获得多少整数,那么您可以使用nextInt()方法

例如

Scanner sc = new Scanner(System.in);
int[] integers = new int[3];
for(int i = 0; i < 3; i++)
{
    integers[i] = sc.nextInt();
}

答案 5 :(得分:3)

以下是如何使用扫描程序处理用户想要输入的整数并将所有值放入数组中的方法。但是,如果您不知道用户将输入多少个整数,则只应使用此方法。如果你知道,你应该只使用Scanner.nextInt()你希望获得整数的次数。

import java.util.Scanner; // imports class so we can use Scanner object

public class Test
{
    public static void main( String[] args )
    {
        Scanner keyboard = new Scanner( System.in );
        System.out.print("Enter numbers: ");

        // This inputs the numbers and stores as one whole string value
        // (e.g. if user entered 1 2 3, input = "1 2 3").
        String input = keyboard.nextLine();

        // This splits up the string every at every space and stores these
        // values in an array called numbersStr. (e.g. if the input variable is 
        // "1 2 3", numbersStr would be {"1", "2", "3"} )
        String[] numbersStr = input.split(" ");

        // This makes an int[] array the same length as our string array
        // called numbers. This is how we will store each number as an integer 
        // instead of a string when we have the values.
        int[] numbers = new int[ numbersStr.length ];

        // Starts a for loop which iterates through the whole array of the
        // numbers as strings.
        for ( int i = 0; i < numbersStr.length; i++ )
        {
            // Turns every value in the numbersStr array into an integer 
            // and puts it into the numbers array.
            numbers[i] = Integer.parseInt( numbersStr[i] );
            // OPTIONAL: Prints out each value in the numbers array.
            System.out.print( numbers[i] + ", " );
        }
        System.out.println();
    }
}

答案 6 :(得分:1)

这很好....

int b = nextInt(); int c = nextInt(); managed-schema.xml

或者你可以循环阅读它们

答案 7 :(得分:1)

  

Java 8

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int arr[] = Arrays.stream(in.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

答案 8 :(得分:0)

它正在使用以下代码:

Scanner input = new Scanner(System.in);
System.out.println("Enter Name : ");
String name = input.next().toString();
System.out.println("Enter Phone # : ");
String phone = input.next().toString();

答案 9 :(得分:0)

你可能正在寻找String.split(String regex)。使用“”作为你的正则表达式。这将为您提供一组字符串,您可以将它们单独解析为整数。

答案 10 :(得分:0)

使用Java 8流:

 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        try{
          int num_of_arrays=Integer.parseInt(br.readLine());
          while(num_of_arrays>0){

              int[] num = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

              num_of_arrays--;
            }

         }

输入:

  

1

     

1 2 3

其中num_of_arrays = 1,而数组元素在下一行。

答案 11 :(得分:0)

有多种方法可以做到这一点,但简单的方法是使用String.split(" ") 这是String类的一种方法,该方法使用空格字符(例如“”(空格)


我们要做的就是将这个词保存在一个字符串数组中。

  

警告::您还必须使用scan.nextLine();其他无法使用的方式(不要使用scan.next();

String user_input = scan.nextLine();
String[] stringsArray = user_input.split(" ");

现在我们需要将这些字符串转换为Integers。创建 for循环 并转换stringArray的每个索引:

for (int i = 0; i < stringsArray.length; i++) {
        int x = Integer.parseInt(stringsArray[i]);
>> Do what you want to do with these int value here
  

最好的方法是将孔stringArray转换为intArray:

 int[] intArray = new int[stringsArray.length];
    for (int i = 0; i < stringsArray.length; i++) {
        intArray[i] = Integer.parseInt(stringsArray[i]);

现在在intArray上执行打印或求和或...所需的任何散文



  

孔代码将如下所示:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    String user_input = scan.nextLine();
    String[] stringsArray = user_input.split(" ");

    int[] intArray = new int[stringsArray.length];
    for (int i = 0; i < stringsArray.length; i++) {
        intArray[i] = Integer.parseInt(stringsArray[i]);
    }
}
}

答案 12 :(得分:0)

专门为黑客地球考试创建了此代码


  Scanner values = new Scanner(System.in);  //initialize scanner
  int[] arr = new int[6]; //initialize array 
  for (int i = 0; i < arr.length; i++) {
      arr[i] = (values.hasNext() == true ? values.nextInt():null);
      // it will read the next input value
  }

 /* user enter =  1 2 3 4 5
    arr[1]= 1
    arr[2]= 2
    and soo on 
 */ 

答案 13 :(得分:0)

当我们想将Integer作为输入
如您的情况,仅输入3个:

import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a,b,c;
a = scan.nextInt();
b = scan.nextInt();
c = scan.nextInt();

对于更多输入,我们可以使用循环:

import java.util.Scanner;
Scanner scan = new Scanner(System.in);
int a[] = new int[n]; //where n is the number of inputs
for(int i=0;i<n;i++){
    a[i] = scan.nextInt();    
}

答案 14 :(得分:0)

我知道这是个老问题了:)我在下面的代码中进行了测试

`String day = "";
 day = sc.next();
 days[i] = Integer.parseInt(day);`

答案 15 :(得分:0)

使用BufferedReader -

loops

答案 16 :(得分:0)

在许多编码网站上使用它:

  • 案例1 :每个行中的整数都被提供

假设您有3个测试用例,每行4个整数输入用空格分隔1 2 3 45 6 7 81 1 2 2

        int t=3,i;
        int a[]=new int[4];

        Scanner scanner = new Scanner(System.in);

        while(t>0)  
        {
            for(i=0; i<4; i++){
                a[i]=scanner.nextInt();
                System.out.println(a[i]);
            }   

        //USE THIS ARRAY A[] OF 4 Separated Integers Values for solving your problem
            t--;
        }
  • 案例2 :每行中的整数数量未提供

        Scanner scanner = new Scanner(System.in);
    
        String lines=scanner.nextLine();
    
        String[] strs = lines.trim().split("\\s+");
    

    请注意,您需要首先修剪():trim().split("\\s+") - 否则,例如拆分a b c将首先发出两个空字符串

        int n=strs.length; //Calculating length gives number of integers
    
        int a[]=new int[n];
    
        for (int i=0; i<n; i++) 
        {
            a[i] = Integer.parseInt(strs[i]); //Converting String_Integer to Integer 
            System.out.println(a[i]);
        }
    

答案 17 :(得分:0)

最好将整行作为字符串,然后使用StringTokenizer获取数字(使用空格作为分隔符),然后将它们解析为整数。这将适用于一行中的n个整数。

    Scanner sc = new Scanner(System.in);
    List<Integer> l = new LinkedList<>(); // use linkedlist to save order of insertion
    StringTokenizer st = new StringTokenizer(sc.nextLine(), " "); // whitespace is the delimiter to create tokens
    while(st.hasMoreTokens())  // iterate until no more tokens
    {
        l.add(Integer.parseInt(st.nextToken()));  // parse each token to integer and add to linkedlist

    }