我正在构建一个简单的程序,但似乎遇到了一个奇怪的问题,对我来说,这个问题毫无意义。该程序获取一个文本文件,并逐行对其进行解析。然后,它根据该线路的特性执行三个动作之一:
如果该行包含内容,请将其复制到在for循环外部声明的变量中如果行以特定的分隔字符开头,请将活动行附加到在for循环外部声明的变量如果该行为空,请将其添加到我创建的Set中,并将变量设置为空。
但是,当出现第二个条件时,它不会追加字符串。在调试时,它看起来像是if条件触发,但该块中似乎没有执行任何内容。尝试删除不需要的字符(在调试模式下触发此条件的所有字符串都显示为\t--,并且将这些字符串附加到正在构建的当前字符串似乎被忽略了。以下是我用来更好地说明的代码。
var activeTextLine:String = "";
for(line <- Source.fromFile(fileName).getLines()) {
if (line.isEmpty() == false) {
if (line.startsWith("t") == true) {
var temp:String = line;
temp.replace("t--", "");
activeTextLine.concat(temp);
} else {
activeTextLine = line.stripLineEnd;
}
}
if (line.isEmpty() == true) {
textLinesSet.add(activeTextLine);
activeTextLine = "";
}
}
使用filter和regex解析不需要的字符的尝试也被证明是徒劳的,使用+运算符连接字符串也是徒劳的。我几乎认为存储活动行的行是不可变的,因此我根本无法修改其内容,但找不到任何能说明问题的内容。
长话短说,我知道我做错了什么。。。。我只是不知所措。
String
s是不可变的。你应该做一些类似的事情:
temp = temp.replace("t--", "");
activeTextLine = activeTextLine.concat(temp);
以便实际修改CCD_ 2和CCD_。如果您不想使用var
来存储可修改的字符串,请使用StringBuilder
或StringBuffer
。