2013-02-04 134 views
1

因此,我現在將一堆字符串標題一起存儲到用戶手機的文件中,然後在重新啓動應用程序時再讀取它。我想讀回字符串,並把它分解上我了,但由於某種原因,將其分解,然後雙打琴絃組分隔符...將字符串拆分爲字符串數組

因此,舉例來說,如果我保存這些字符串

Ricky(har)Bobby(har)是(har)cool(har)

(har)是我用來存儲它們的分隔符。 (例如)

出於某種原因,當我使用分裂功能的「哈日」

它給了我一個字符串數組,但雙打我保存了多少...所以字符串數組將有兩個瑞奇的兩個鮑比的兩個是和兩個很酷的。 我不知道該說些什麼,說實話。一直盯着這個小時......任何人有任何想法?

line = BR.readLine(); 
      String[] each = line.split("<TAG>"); 
      for (int i = 0; i < each.length; i++) { 
       listOfCourses.add((each[i])); 
       //Toast.makeText(context, each[i], Toast.LENGTH_SHORT).show(); 
      } 

下面是存儲數據到用戶的手機功能

//adds data into the classes file on user's phone 
    public void addClassesIntoFile(Context context, ArrayList<String> classList) { 
     try { 
      FileOutputStream fos = context.openFileOutput(CLASSLIST_FILENAME, 
        Context.MODE_PRIVATE | Context.MODE_APPEND); 
      OutputStreamWriter osw = new OutputStreamWriter(fos); 
      for (int i = 0; i < classList.size(); i++) { 
       osw.write(classList.get(i) + "<TAG>"); 
      } 
      osw.flush(); 
      osw.close(); 
     } catch (FileNotFoundException e) { 
      // catch errors opening file 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
+0

也許你正在寫它們兩次:/ –

+0

嘗試在第2行中添加Log.v,如下所示:Log.v(「Test」,line);並查看已存儲的內容 – SalGad

+0

我可以看到它在閱讀什麼的Toast消息。 我也檢查了寫入文件。它寫入正確:( – cj1098

回答

2

我不認爲你的分割功能是問題,而是認爲它是與你的代碼的其他部分。

  1. 是否String在進行拆分之前是否正確?或者你看到它的重複?
  2. 我想你的問題是addClassIntoFile方法。由於您正在追加File,請確保您沒有重新添加已存在的值。除非您在某個時候刪除該文件,否則在下次啓動該應用程序時它會一直存在。
  3. 最後確保你不打電話addClassIntoFile更多,那麼你的意思也是。 IE,意外地在一個給定的對象上多次調用它。

如果我在這一切都不正確,那麼請發佈一個String看起來像在分裂之前的例子,所以我們可以肯定給定的正則表達式是正確的。

+0

謝謝......這是真正愚蠢的完全無關的任何這一點,但仍然,哈哈。只是高興地修復它。 – cj1098

0

替換:

String[] each = line.split("<TAG>")` 

與此:

String[] each= line.split("[(har)]"); 

如果錯了再告訴我請

+0

謹慎詳細說明? –

+0

爲什麼-1請?我認爲這是他的代碼的錯誤,其餘的將會很好,如果他用我的代替他的拆分方式 –

+0

他的代碼不包含代幣或羅馬 - 他究竟是什麼代替?你的回答需要澄清。如果他必須猜測如何應用你的答案,這不是一個答案,這是一個暗示。 –