1

所以我目前将一堆字符串标题一起存储到用户手机上的一个文件中,然后稍后读取(当他们重新启动应用程序时)。我正在尝试读回字符串并将其拆分为我为其设置的分隔符,但由于某种原因它拆分它然后将字符串加倍......

因此,例如,如果我存储了这些字符串

瑞奇(哈)鲍比(哈)是(哈)酷(哈)

(har) 是我用来存储它们的分隔符。(例如)

出于某种原因,当我在“har”上使用拆分功能时

它给了我一个字符串数组,但是将我存储的数量翻了一番......所以字符串数组将有两个 Ricky 的两个 Bobby 的两个 is 和两个 cool 的。老实说,我不知所措。盯着这个看了好几个小时……有人知道吗?

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();
        }
    }
4

2 回答 2

2

我不相信您的拆分功能是问题,而是认为它与您的代码的其他部分有关。

  1. 进行String拆分之前是否正确?或者你看到里面有重复吗?
  2. 我想问题出在你的addClassIntoFile方法上。由于您要追加到 中File,因此请确保您没有重新添加已经存在的值。除非您在某个时候删除该文件,否则它会在下次启动应用程序时保留。
  3. 最后确保你没有打电话给addClassIntoFile你的意思。IE,不小心在给定对象上多次调用它。

如果我在这一切上都不正确,那么请发布String一个拆分前的示例,以便我们确定给定的正则表达式是正确的。

于 2013-02-04T19:32:40.187 回答
0

代替:

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

有了这个:

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

如果还有错,请告诉我

于 2013-02-04T18:38:14.110 回答