str.trim()为什么不用某些单词删除所有空格?

时间:2018-02-07 22:33:02

标签: java

我正在尝试获取一个文本文件,其中包含类似于程序集的代码,并将其解析为java中的数组。文本文件如下所示:

        begin
        LDA #10     ;load $0A into accumulator
        LDX $15      ;load $15m into X
_loop   TAX         ;transfer A to X 
        SEC         ;set carry flag
        end

目前,我的代码逐行读取文本文件,并将每一行存储为数组中的单独字符串。这样可以正常工作,代码会按预期在字符串中保留空格。接下来,我将数组中的每一行传递给下面的代码,然后使用str.split(" ")将每一行分开,然后修剪每个新字符串,然后再将其放入另一个数组并返回数组。

所以要明确这个过程是这样的:

  1. LDA #10 ;load $0A into accumulator一大行
  2. dividedLine[] = ["LDA", "#10", ";load", "etc.."]行分为其元素
  3. 唯一的问题是,有些单词的空格被str.trim()完全删除,但是其他一些单词仍然留有空格。我认为这可能与我正在使用的标签有关,但我不确定。

    这是我得到的输出:

    beginLDA#10;load$0AintoaccumulatorLDX$15;load$15mintoX_loop TAX ;transferAtoXSEC ;setcarryflagend

    正如你所看到的,'loop'和'TAX'之间以及'SEC'和'; set'之间存在大量的空格,它们不应该存在。

    这是我正在使用的原始文本文件,因为我稍微改了一下以便更容易在堆栈上阅读:https://gist.github.com/anonymous/c802ca31d5402c702ada237bea47f223

    这是我的代码:

    public String[] divideLine(String line) 
        {
            String[] lineArray = line.split(" ");
            for(String str : lineArray)
            {
                str = str.trim();
                System.out.print(str);
            }
            return lineArray;
        }
    

    如果是导致问题的标签,有没有办法在处理每一行之前将所有标签转换为空格?

2 个答案:

答案 0 :(得分:0)

如果你拆分一个空白字符,那么这些部分会有一些标签,用于说明你看到的空白区域。

例如,原始文件的第五行是

SEC ;set carry flag,或标签字符为\ t,

\tSEC\t\t;set carry flag

" SEC ;set carry flag".split(" ")返回数组

[ SEC ;set, carry, flag]

或标签字符为\ t,您有

[\tSEC\t\t;set, carry, flag]

正如其他人所提到的,您可以将代码更改为拆分为"\\s+"之类的其他正则表达式。

答案 1 :(得分:0)

可能是apache的库commons-lang3会有所帮助。该库中有StringUtils个班级。

请参阅https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#normalizeSpace-java.lang.String-

normalizeSpace删除起始和结束空格,并将每个类似空格的符号序列替换为1个空格。我认为这就是你想要的。