【问题标题】:Read Strings separated by newline using BufferedReader into a String array使用 BufferedReader 将由换行符分隔的字符串读入字符串数组
【发布时间】:2016-06-17 12:04:48
【问题描述】:

我读过很多这样的问题,但它们都是关于从txt 文件中读取输入的。我想从用户而不是从文件中读取输入。

我输入如下:

6   //number of total Strings to store in array 
babu   
anand
rani    
aarti
nandu
rani

我已尝试使用以下代码在 String 数组中获取此类输入:

    int n = in.nextInt();    // n= 6 here
    String[] s = new String[n];   //String array of size 6 here
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try{
         s = br.readLine().split("\\s");
    }
    catch(Exception e){
        System.out.println(e);
    } 

提供给split()regex 是否正确?我在这里缺少什么?如果这不是正确的方法,我应该为这个问题做些什么?

【问题讨论】:

    标签: java regex string bufferedreader


    【解决方案1】:

    正则表达式使用反斜杠 (\),而您使用斜杠 //s,正确的是 \\s

    但是这个拆分是不需要的,你只需要readLine,你会得到你需要的(假设你不想拆分行中的单词)。

    您应该使用循环来读取所有数据(并摆脱您似乎在 in 变量中拥有的扫描仪):

    String[] s = null
    try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) {
        int n = Integer.parseInt(br.readLine());
        for (int line = 0; line < n; line++) {
            s[line] = br.readLine();
        }
    } catch(Exception e){
        System.out.println(e);       
    } 
    

    【讨论】:

    • 但是当我打印数组时没有打印任何内容,它在索引 1 处给出 arrayOutOfBoundsException。
    • 如果我只使用 readLine() 比我不能将它直接存储在数组中
    • @Kaushal28 你不想要吗?好的,所以您需要将整个数据读入一个大字符串,然后您可以对整个字符串执行split
    • 但我对空格分隔的字符串也做了同样的事情。为什么我不能对换行符分隔的字符串执行此操作?
    • 因为您使用的是readLine,这是...读取单行
    【解决方案2】:

    将第三行移到第一行之前。

    然后在新的第二行中使用它:

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

    当然,您需要一个循环来将输入字符串放入一个数组中。

    这应该会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 2010-10-19
      • 2017-06-27
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2011-07-27
      • 2017-02-03
      • 2013-01-08
      相关资源
      最近更新 更多