簡體   English   中英

如何使用 BufferedReader 對象從 Java 中的一行讀取多個整數值?

[英]How to read multiple integer values from one line in Java using BufferedReader object?

我正在使用 BufferedReader 類來讀取我的 Java 程序中的輸入。 我想從一個用戶那里讀取輸入,該用戶可以在一行中輸入多個帶空格的整數數據。 我想在一個整數數組中讀取所有這些數據。

輸入格式——用戶首先輸入他/她想輸入的數字

然后在下一行中有多個整數值-

輸入:

5

2 456 43 21 12

現在,我使用 BufferedReader 的對象 (br) 讀取輸入

int numberOfInputs = Integer.parseInt(br.readLine());

接下來,我想讀取數組中的下一行輸入

int a[] = new int[n];

但是我們不能使用這種技術閱讀

for(int i=0;i<n;i++)
{
   a[i]=Integer.parseInt(br.readLine()); //won't work
}

那么,我的問題是否有任何解決方案,或者我們不能使用 BufferedReader 對象從一行讀取多個整數

因為使用 Scanner 對象我們可以讀取這種類型的輸入

for(int i=0;i<n;i++)
{
   a[i]=in.nextInt(); //will work..... 'in' is object of Scanner class
}

嘗試下一個:

int a[] = new int[n];
String line = br.readLine(); // to read multiple integers line
String[] strs = line.trim().split("\\s+");
for (int i = 0; i < n; i++) {
    a[i] = Integer.parseInt(strs[i]);
}

遲到了,但你可以在Java 8中使用這樣做在一個班輪streams

InputStreamReader isr= new InputStreamReader();
BufferedReader br= new BufferedReader(isr);

int[] input = Arrays.stream(br.readLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();

如果您想讀取整數而您不知道整數的數量

String[] integersInString = br.readLine().split(" ");
int a[] = new int[integersInString.length];
for (int i = 0; i < integersInString.length; i++) {
    a[i] = Integer.parseInt(integersInString[i]);
}

Integer.parseInt(br.readLine()) -> 讀取整行,然后將其轉換為整數。

scanner.nextInt() -> 在一行中逐個讀取每個標記,然后嘗試將其轉換為整數。

String[] in = br.readLine().trim().split("\\s+"); 
// above code reads the whole line, trims the extra spaces 
// before or after each element until one space left, 
// splits each token according to the space and store each token as an element of the string array.


for(int i = 0; i < n; i++)
    arr[i] = Integer.parseInt(in[i]);

// Converts each element in the string array as an integer and stores it in an integer array.
import java.io.*;
public class HelloWorld{

     public static void main(String []args){
        int i;
        System.out.println("enter the array element");
        InputStreamReader isr= new InputStreamReader();
        BufferedReader ib= new BufferedReader(isr);
        int a[]=new int [5];
        for(i=0;i<5;i++)
        {
            a[i]= Integer.parseInt(ib.readLine(a[i]));

        }
        for(i=0;i<5;i++)
        {
            System.out.println(a[i]);
        }

     }
}

我將此代碼用於列表:

List<Integer> numbers = Stream.of(reader.readLine().split("\\s+")).map(Integer::valueOf).collect(Collectors.toList());

數組幾乎相同:

int[] numbersArray = Arrays.stream(reader.readLine().split("\\s+")).mapToInt(Integer::valueOf).toArray(); 

您可以使用 java.util 包的 StringTokenizer 類。 StringTokenizer 類允許應用程序將字符串分解為標記。 您可以使用 StringTokenizer 類的 nextToken() 方法使用此令牌。

您可以使用以下 StringTokenizer 的構造函數:

StringTokenizer(String str, String delimiter);

您可以使用 space(" ") 作為 delemeter。

int a[] = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine() , " ");
for(int i=0 ; i<N ; i++) {
    a[i] = Integer.parseInt(st.nextToken());
}

正如你提到的,有兩行 - 第一行需要整數數量,第二行需要那么多數字

INPUT: 5 2 456 43 21 12

所以要解決這個問題並將其轉換為數組 -

String[] strs = inputData.trim().split("\\s+");  //String with all inputs 5 2 456 43 21 12

int n= Integer.parseInt(strs[0]);    //As you said first string contains the length

int a[] = new int[n];               //Initializing array of that length

for (int i = 0; i < n; i++)         
{

a[i] = Integer.parseInt(strs[i+1]);     // a[0] will be equal to a[1] and so on....

}


     
        

輸入/輸出:34 54

 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                                                                        
 StringTokenizer st = new StringTokenizer(br.readLine()," ");
 for(int i=0;i<st.countTokens();i++){
   a=Integer.parseInt(st.nextToken());
   b=Integer.parseInt(st.nextToken());
 }

//用於一行的快速輸入輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM