0

文字列の抽出に問題があります

ファイル名を参照して、4 つの選択肢 (ボタンなど) で複数の選択肢を作成しています。ファイル (質問) は png で、ファイル名は Number-Q01AZ7BZ8CZ9DZ10ANZ8.png です。これらの png は、assets フォルダーの下に配置されます。

     Set<String> regions = regionsMap.keySet(); // get Set of regions

     // loop through each region
     for (String region : regions) 
     {
        if (regionsMap.get(region)) // if region is enabled
        {
           // get a list of all flag image files in this region
           String[] paths = assets.list(region);

           for (String path : paths) 
              fileNameList.add(path.replace(".png", ""));
        } // end if
     } // end for

String fileName = fileNameList.get(randomIndex);

if (!quizCountriesList.contains(fileName)) 
{
   quizCountriesList.add(fileName); // add the file to the list

   String nextImageName = quizCountriesList.remove(0);
   correctAnswer = nextImageName; // update the correct answer

   int AZ = correctAnswer.indexOf("AZ");
   int BZ = correctAnswer.indexOf("BZ");
   int CZ = correctAnswer.indexOf("CZ");
   int DZ = correctAnswer.indexOf("DZ");
   int ANZ = correctAnswer.indexOf("ANZ");          

   String choiceA = null;
   String choiceB = null;
   String choiceC = null;
   String choiceD = null;

   choiceA = correctAnswer.substring( (AZ+2), (BZ) );
   choiceB = correctAnswer.substring( (BZ+2), (CZ) );
   choiceC = correctAnswer.substring( (CZ+2), (DZ) );
   choiceD = correctAnswer.substring( (DZ+2), (ANZ) );  

logcat は次のとおりです。

11-09 21:14:08.495: E/AndroidRuntime(25905): FATAL EXCEPTION: main
11-09 21:14:08.495: E/AndroidRuntime(25905): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.trial.quizgame/com.trial.quizgame.QuizGame}: java.lang.StringIndexOutOfBoundsException: length=15; regionStart=1; regionLength=-2
11-09 21:14:08.495: E/AndroidRuntime(25905):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)

ボタンを .setText(correctAnswer) として設定しようとしましたが、Number-Q01AZ7BZ8CZ9DZ10ANZ8 として正しく表示されるため、「correctAnswer」の文字列を取得する上部は問題ありません。文字列を抽出する際に問題が残りましたが、BZ は AZ の後ろの位置にある必要があるため、CZ は BZ の後ろなどのように:

logcat から、regionLength は -2? どうすればこれを処理できますか?Q01、A=7、B=8、C=9、D=10、ANZ=8 を選択してください

事前にアドバイスをありがとう!

4

1 に答える 1

0

文字列値に関するあなたの仮定は間違っています。このコードは、AZ、BZ、CZ、DZ、ANZ が存在する場合、エラーなしで実行されます。

コメントでアドバイスされているようにデバッガーを実行するか、android logcat を使用してデバッグ コンテキストを提供します。android.utils.Log.d("APP", String.format("AZ=%d", AZ));

データの保存方法は大した問題ではありません。数日間調整できます...画像の名前と4つの可能な回答を含むxmlファイルを作成できます...アンダースコアアプローチを使用でき、現在のものをそのまま使用できます。あなただけが使用するまで、それは本当に問題ではありません。シンプルに保つ必要があります。より複雑=>バグの可能性が高くなります...

したがって、情報を保存する方法を改良するのではなく、デバッグとログについて読むことをお勧めします...ファイル名に保存することは、賢明なアイデアであり、迅速かつ効率的で、理想的なハックです...

于 2012-11-09T13:48:54.397 に答える