我正在构建一个简单的程序,似乎遇到了一个奇怪的问题,对我来说,没有意义。该程序采用文本文件并逐行解析。然后,它根据该行的特征执行三个操作之一:
如果该行包含内容,请将其复制到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 = "";
}
}
尝试使用过滤器和正则表达式也证明了解析不需要的字符没有用,也没有使用+运算符来连接字符串。我几乎认为存储活动行的行是不可变的,因此我根本无法修改其内容,但却无法找到任何说法。
这么长的故事简短,我知道我做错了什么......我只是不知所措。
答案 0 :(得分:3)
String
是不可变的。你应该做点什么:
temp = temp.replace("\t--", "");
activeTextLine = activeTextLine.concat(temp);
为了实际修改activeTextLine
和temp
中的字符串。如果您不想使用var
存储可修改的字符串,请改用StringBuilder
或StringBuffer
。