在横向循环时无法更改变量

时间:2015-02-10 19:35:00

标签: regex scala

我正在构建一个简单的程序,似乎遇到了一个奇怪的问题,对我来说,没有意义。该程序采用文本文件并逐行解析。然后,它根据该行的特征执行三个操作之一:

如果该行包含内容,请将其复制到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 = "";
      }
    }

尝试使用过滤器和正则表达式也证明了解析不需要的字符没有用,也没有使用+运算符来连接字符串。我几乎认为存储活动行的行是不可变的,因此我根本无法修改其内容,但却无法找到任何说法。

这么长的故事简短,我知道我做错了什么......我只是不知所措。

1 个答案:

答案 0 :(得分:3)

String是不可变的。你应该做点什么:

temp = temp.replace("\t--", "");
activeTextLine = activeTextLine.concat(temp);

为了实际修改activeTextLinetemp中的字符串。如果您不想使用var存储可修改的字符串,请改用StringBuilderStringBuffer