【问题标题】:How to separate items in a file consisting of spaces when the items themselves are separate with spaces?当项目本身用空格分隔时,如何分隔由空格组成的文件中的项目?
【发布时间】:2011-09-12 23:03:13
【问题描述】:

我的批发商有一个很长的价格文件,我很难读入我的程序,因为每一列都用 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 ?

【问题讨论】:

  • 这是一种非常糟糕的格式。

标签: java java.util.scanner removing-whitespace


【解决方案1】:

使用split 方法。这个方法接受一个正则表达式作为参数,所以这样的东西应该适合你:

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

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

{2,} 表示要断开的字符串需要有两个或更多空格。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        再看文字,格式好像是

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-29
            • 2015-10-31
            • 2017-05-31
            相关资源
            最近更新 更多