【问题标题】:String.split() for reading input fileString.split() 用于读取输入文件
【发布时间】:2017-04-03 15:34:56
【问题描述】:

所以我有一个文件试图从中解析行。格式为

Name,_178cm,_AnotherName,_180cm,....

下划线表示空白,不在文件中。

现在,我有...(str 是我正在解析的行)

String[] arr = str.split(" *,*");

但它给了我一个NumberFormatException。 我的正则表达式有什么问题??

编辑:

String[] arr = str.split(" *,*");
Person per;
for (int i = 0; i < arr.length - 1; i++) {
    per = new Person(arr[i], Integer.valueOf(arr[i + 1]));
    party.add(per);
}

堆栈跟踪:

Exception in thread "main" java.lang.NumberFormatException: For input string: "l"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at rollercoaster.QueueReader.readQueueFile(QueueReader.java:72)
at rollercoaster.QueueReader.<init>(QueueReader.java:25)
at rollercoaster.ProjectRunner.main(ProjectRunner.java:19)

【问题讨论】:

  • 你能粘贴代码和堆栈跟踪吗?
  • 当然没问题

标签: java regex string input split


【解决方案1】:

根据您在此处提供的信息很难确定,我们只能猜测。我需要至少查看输入文件的一部分,以便就如何继续提出建议。

【讨论】:

    【解决方案2】:

    在您的情况下,不需要正则表达式,您可以使用

    String[] arr = str.split(", ");
    

    无论如何,您的指令不会导致NumberFormatException,因为任何地方都没有涉及数字。您可能正在尝试将一些结果字符串用作数字,但由于不是数字而失败。

    编辑

    从你的示例代码来看,有两个问题:

    1. 正如@AlexanderRomanov 已经指出的那样,您不能将180cm 转换为数字,但您必须先删除该cm
    2. 你创建了一个新人,名字在i,身高在i+1,所以对于i = 0,这个人的“名字”为name,178为height,但你的for循环i 加 1,因此下一次迭代将尝试使用 name 178 和 height "Another Name" 创建一个人。

    这里的代码应该可以解决你的问题

    String[] arr = str.split(",");
    Person per;
    for (int i = 0; i < arr.length - 1; i += 2) {
        per = new Person(arr[i], Integer.valueOf(arr[i + 1].replace("cm", "")));
        party.add(per);
    }
    

    请注意,for 步长现在为 2,因此第二次迭代将从 2 开始并考虑“AnotherName”和 180。

    【讨论】:

    • 每个人都有一个需要解析为整数的高度,我相信当项目没有正确添加到数组中时,它下面的 for 循环正在寻找第二个数字位置,没有一个。
    • 但是你不需要正则表达式是对的,这些隐含的指示是我的老师给我的奇怪的,这就是我走这条路的原因......
    【解决方案3】:

    您不需要正则表达式,但在尝试parseInt 您的令牌之前,您需要去掉非数字符号。 试试这个:

    String[] arr = str.split(",");
    
    for (int i = 0; i < arr.length - 1; i += 2) {
        String name = arr[i];
        int height = Integer.valueOf(arr[i + 1].replaceAll("\\D+", ""));
        Person person = new Person(name, height);
        party.add(person);
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多