转换循环时无法更改变量



我正在构建一个简单的程序,但似乎遇到了一个奇怪的问题,对我来说,这个问题毫无意义。该程序获取一个文本文件,并逐行对其进行解析。然后,它根据该线路的特性执行三个动作之一:

如果该行包含内容,请将其复制到在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来存储可修改的字符串,请使用StringBuilderStringBuffer

最新更新