1

そのため、現在、一連の文字列タイトルをユーザーの電話のファイルにまとめて保存し、後で (アプリを再起動したときに) 読み取ります。文字列を読み返し、設定した区切り文字で分割しようとしていますが、何らかの理由で分割してから文字列を2倍にします...

たとえば、これらの文字列を保存した場合

Ricky(har)Bobby(har)is(har)cool(har)

(har) は、それらを格納するために使用する区切り文字です。(例えば)

なぜか、「har」で分割機能を使用すると、

文字列の配列が得られますが、保存した数は 2 倍になります...したがって、文字列の配列には、2 つの Ricky の 2 つの Bobby の 2 つの Is と 2 つの 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、特定のオブジェクトに対して誤って2回以上呼び出しました。

私がこれらすべてについて間違っている場合はString、分割前にどのように見えるかの例を投稿してください。そうすれば、指定された正規表現が正しいことを確認できます。

于 2013-02-04T19:32:40.187 に答える
0

交換:

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

これとともに:

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

それでも間違っている場合は、教えてください

于 2013-02-04T18:38:14.110 に答える