我在提取字符串时遇到了一些问题
我正在选择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
提前感谢您的建议!
答案 0 :(得分:0)
您对字符串值的假设是错误的。如果存在AZ,BZ,CZ,DZ,ANZ,此代码应该运行时没有错误。
按照注释中的建议运行调试器,或使用android logcat提供一些调试上下文。 android.utils.Log.d("APP", String.format("AZ=%d", AZ));
如何存储数据并不是什么大问题。你可以调整它几天...你可以创建包含图像名称的xml文件,以及四个可能的答案...你可以使用下划线方法,你可以保持现有的。直到它只由你使用,它并不重要。你应该保持简单。更复杂=&gt;错误的机会更多......
所以我建议阅读有关调试和记录的内容,而不是改进存储信息的方式......将其存储在文件名中,这是一个聪明的主意,快速有效,理想的黑客......