2015-02-10 45 views
0

我正在構建一個簡單的程序,似乎遇到了一個奇怪的問題,對我來說,沒有任何意義。該程序需要一個文本文件並逐行解析。然後,根據該行的特徵執行三種操作之一:無法更改變量,而橫向循環

如果該行包含內容,則將其複製到在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 = ""; 
     } 
    } 

也嘗試已經證明無果而終解析出不需要的人物,也不是使用concating字符串+運營商。我幾乎想,行者存儲的有效行是不可改變的,因此我根本無法修改它的內容,但是一直沒有找到任何可以說這種或那種方式的東西。

這麼長的故事,我知道我做錯了什麼....我是就在一個地方至於什麼。

回答

3

String s是不可變的。你應該這樣做:

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

,以實際修改字符串activeTextLinetemp。如果您不想使用var來存儲可修改的字符串,請改爲使用StringBuilderStringBuffer