0

我的批发商有一个很长的价格文件,我很难读入我的程序,因为每一列都用 x 个空格分隔。像这样;

99995116273       34 mm asasa                                         00472,50100                                                                                               
99998375442       11 lalaaasdsddfgdfgdf                                00503,00206                                                                                             
99998375443       1 1/4 Microkupling                             00867,00206 

如何使用 Java 中的 Scanner 类将每一列分成 Part no、Description 和 Price ?

4

5 回答 5

1

使用拆分方法。此方法将正则表达式作为参数,所以像这样的东西应该适合你:

String line =....;
String[] colums = line.split("\\s{2,}");

这将在每次找到两个或更多空格时创建一个新字符串(空格将被丢弃)。结果将是一个包含您需要的单词的数组。

{2,}意味着要破坏字符串,它需要有两个或更多空格。

于 2011-09-12T14:46:37.313 回答
0

查看粘贴的文本,似乎原始文本正在使用tab字符来对齐列。如果您正在处理的文本有制表符并且字段(项目)本身不包含空格,那么您可以再使用一个tab字符作为分隔符。

如果制表符已经转换为空格并且结果是上面的输出,那么这将成为一个更加困难的问题,并且只能通过启发式方法来解决。

再次查看文本,fornat 似乎是

  • 行以零件号开始,零件号是数字序列,后跟空格(不是字段的一部分)
  • 行以 price 结尾,它在空格之后(不是字段的一部分)开始,是一个数字序列,后跟一个或多个(命令后跟数字序列)
  • 在修剪两边的空白之后,中间的一切都是描述

如果您可以确认这是格式,那么该解决方案实施起来并不是很复杂。

于 2011-09-12T14:55:11.583 回答
0

与其拆分字符串,为什么不从字符串的开头读取零件编号,从末尾开始读取价格,中间剩下的是描述。

于 2011-09-12T14:55:25.793 回答
0

早上好,我不是专业的 Java 开发人员,但您没有将值分隔符视为空格,而是尝试将其视为“制表符”?我过去处理过制表符分隔文件,这里可能就是这种情况。

于 2011-09-12T14:47:18.493 回答
0

假设每行有 1 个项目,您可以使用以下内容:

Scanner s = new Scanner(input).useDelimiter("\\n");

所以 s.next 将检索一个包含项目的字符串,然后单独扫描每一行或简单地拆分它。

于 2011-09-12T14:47:45.043 回答