2013-02-04 61 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

他的代码不包含代币或罗马 - 他究竟是什么代替?你的回答需要澄清。如果他必须猜测如何应用你的答案,这不是一个答案,这是一个暗示。 –