【问题标题】:java: taking input with BufferedReader- more than one spacesjava:使用 BufferedReader 获取输入 - 多个空格
【发布时间】:2014-08-31 04:37:51
【问题描述】:

我在一行中有空格分隔的整数,并希望使用 BufferedReader 输入它们。 ** 整数之间可能有多个空格。可能有前导和尾随空格**

现在我有以下代码,

`

  int[] a = new int[1000001]; // integer array

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

  int n; // no of integers

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

  String[] s = br.readLine().split(" ");  //taking input

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

           a[i] = Integer.parseInt(s[i]);
      }

`

它不工作。请帮助。任何帮助或建议将不胜感激。谢谢。

编辑:1 - 我使用了 split("\s+")。但这关心整数之间的多个空格......前导和尾随空格怎么样......??如何处理它们..?

【问题讨论】:

  • Its not working. 究竟是什么不起作用?你有任何错误吗?有什么例外吗?请更具描述性。
  • 是的,我收到了 - java.lang.NumberFormatException
  • 表示解析错误。你可以使用java.util.Scanner吗?
  • 但是扫描仪很慢,这就是我避免使用扫描仪的原因。但是,如果您知道如何使用扫描仪进行操作,那也会有所帮助。谢谢
  • '扫描仪很慢'与什么相比?你没有任何东西可以与之比较,你也没有测量扫描仪。所以你的说法毫无意义。

标签: java input bufferedreader spaces


【解决方案1】:

使用split("\\s+") 应该可以解决问题。它告诉split() 使用一个或多个空格字符作为两个标记之间的分隔符。

此外,您应该在读取要读取的 int 数量后分配 int[],而不是分配一个太大的 int,这样会浪费内存

【讨论】:

  • 我使用了 split("\\s+")。但这关心整数之间的多个空格......前导和尾随空格怎么样......?如何对付他们..?
  • 使用br.readLine().trim().split("\\s+") 它将删除前导和尾随空格
【解决方案2】:

您可以先阅读该行,然后使用正则表达式将所有空格替换为一个空格。然后你可以像上面那样拆分它。如果您需要进一步的帮助或代码示例,请告诉我。

编辑: NumberFormatException 可能是因为 Integer.parseInt 试图解析整数值之外的东西。改用 Long.parseLong。

【讨论】:

  • 我从来没有用过“正则表达式”。所以,你能提供一点代码和平吗?
  • "\\s+" 是正则表达式的一个示例,表示 1 个或多个空格。
猜你喜欢
  • 1970-01-01
  • 2015-03-17
  • 2015-08-17
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多