提取子字符串

时间:2012-11-09 13:18:29

标签: android string substring

我在提取字符串时遇到了一些问题

我正在选择4个选项(例如按钮),并通过参考文件名进行选择。文件(即问题)是png,文件名是Number-Q01AZ7BZ8CZ9DZ10ANZ8.png。这些png放在资产文件夹下。

     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,因此获取字符串的顶部为&#34; correctAnswer&#34;应该可以。提取字符串时出现了问题,但是BZ必须位于AZ后面的位置,所以BZ后面的CZ等等:

从logcat开始,regionLength是-2?我怎么能处理这个? 我想它是Q01,选择A = 7,B = 8,C = 9,D = 10和ANZ = 8

提前感谢您的建议!

1 个答案:

答案 0 :(得分:0)

您对字符串值的假设是错误的。如果存在AZ,BZ,CZ,DZ,ANZ,此代码应该运行时没有错误。

按照注释中的建议运行调试器,或使用android logcat提供一些调试上下文。 android.utils.Log.d("APP", String.format("AZ=%d", AZ));

如何存储数据并不是什么大问题。你可以调整它几天...你可以创建包含图像名称的xml文件,以及四个可能的答案...你可以使用下划线方法,你可以保持现有的。直到它只由你使用,它并不重要。你应该保持简单。更复杂=&gt;错误的机会更多......

所以我建议阅读有关调试和记录的内容,而不是改进存储信息的方式......将其存储在文件名中,这是一个聪明的主意,快速有效,理想的黑客......