为了账号安全,请及时绑定邮箱和手机立即绑定

Java不会在双逗号“格式错误的行”上崩溃

Java不会在双逗号“格式错误的行”上崩溃

catspeake 2022-06-04 15:41:11
我手头的任务是能够根据地址中的文本文件处理行,并将它们分类为各自的类别,“东”、“西”、“百老汇”、“大道”和“坏 id”。下面的代码 100% 正确执行此操作,直到它遇到包含双逗号的格式错误的行,而我可以用单数逗号替换所有双逗号,这不能完全解决问题,因为该行将被视为“格式错误”和然后应该将其添加到 badId 的类别中,但它会导致NumberFormatException完全错误和下面的代码。我想知道是否有可能以一种不会导致此异常的方式忽略双逗号,但仍然能够解析文件的其余部分,将这一行按预期添加到 badId 的数组中。文本文件读取自123-ABC-4567, 15 W. 15th St., 50.1456-BGT-9876,22 Broadway,24QAZ-456-QWER, 100 East 20th Street,50Q2Z-457-QWER, 200 East 20th Street, 49678-FGH-9845 ,,45 5th Ave, 12.2,678-FGH-9846 ,45 5th Ave, 12.2123-ABC-9999, 46 Foo Bar, 220.0347-poy-3465, 101 B'way,24
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

这里的问题在于:

Float f = Float.valueOf(result[2]);

在这里,您尝试将第二个索引的值转换为Float.

在前四行数据中,转换没有问题,因为被转换的值是50.1,24,50.

但是,由于实际上将被解析为空字符串的“双逗号”,现在转换为 on 45 5th Ave,然后将抛出NumberFormatException.

在关于过滤出数组中的空值的评论中的查询后添加以下部分:

您可以使用以下(Java 8 及更高版本)过滤掉数组中的空值:

String[] filteredResult = Arrays.stream(result).filter(o -> !o.isEmpty()).toArray(String[]::new);

话虽如此..此解决方案专门针对您在这种情况下面临的问题,并且可能不是一个好的解决方案。

实际的解决方案是在开始解析数据之前实际清理数据。


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信