1

私はそれが明白でなければならないことを知っていますが、答えを見つけることができません。

「、」などの正しい文字を取得するにはどうすればよいですか...?

これは私が使用している方法です、

public void read(Context context) {

        InputStream inputStream = context.getResources().openRawResource(
                R.raw.puzzles);
        Scanner scanner = new Scanner(inputStream);
        scanner.useDelimiter(PATTERN);
        for (int i = 0; i < 70; i++) {
            ids[i] = scanner.next();
            titles[i] = scanner.next();
            questions[i] = scanner.next();
            answers[i] = scanner.next();
        }

    }

ありがとう

4

3 に答える 3

1

数日間の調査の後、私はついに答えを見つけました。

まず、生のバイト読み取りではなく、文字読み取り用にInputStreamからBufferedReaderを作成しました。

最も重要なのは、charSetNameを使用したコンストラクターを使用してInputStreamをインスタンス化したことです。

NotePadの[名前を付けて保存]に移動すると、エンコーディングを選択できます。

最後に、サポートされているエンコーディングをここで見つけました。

NotePadのデフォルトはANSIのようですが、これはサポートされていないようです。そのため、これを変更して、.txtファイルをUTF8として保存しました。

コードは次のとおりです。

public void read(Context context) {

        InputStream inputStream = context.getResources().openRawResource(
                R.raw.puzzles);

        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(
                    inputStream, "UTF8"));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }

        Puzzle p = null;

        Scanner scanner = new Scanner(bufferedReader);
        scanner.useDelimiter(TOKEN);
        // Skips the first strange char
        scanner.next();
        while (scanner.hasNext()) {

            p = new Puzzle();
            p.setId(scanner.next());
            p.setTitle(scanner.next());
            p.setQuestion(scanner.next());
            p.setAnswer(scanner.next());
            puzzles.add(p);
        }

    }
于 2012-05-14T15:06:50.127 に答える
0

Scannerオブジェクトは、デフォルトでは文字と数字のみを認識するようです...この質問への回答のように、スキャナーを使用せずにアプローチを試してください:Android読み取りテキストrawリソースファイル

そして、String.indexOf()、TextUtils.StringSplitter、または同様のものを使用して、各行を読み取り、トークン間の実際の文字列を解析します。

データが多かれ少なかれ将来のパズルファイルのために、固定数(この場合は70)ではなく、ファイルの終わりまでデータを読み取るためにwhileループを使用することをお勧めします。

于 2012-05-11T17:29:27.070 に答える
0

Scanner文字セットを渡す場所 のインスタンスを使用してみてください。new Scanner (InputStream src, String charsetName)

HTH

于 2012-05-11T17:37:28.260 に答える