我正在尝试获取一个文本文件,其中包含类似于程序集的代码,并将其解析为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(" ")
将每一行分开,然后修剪每个新字符串,然后再将其放入另一个数组并返回数组。
所以要明确这个过程是这样的:
LDA #10 ;load $0A into accumulator
一大行dividedLine[] = ["LDA", "#10", ";load", "etc.."]
行分为其元素唯一的问题是,有些单词的空格被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;
}
如果是导致问题的标签,有没有办法在处理每一行之前将所有标签转换为空格?
答案 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
个班级。
normalizeSpace
删除起始和结束空格,并将每个类似空格的符号序列替换为1个空格。我认为这就是你想要的。