将string.splits嵌套在for循环中 - 内部拆分在分配时获取NPE

时间:2013-12-05 06:48:16

标签: java android arrays split iterator

所以,今天我试图分裂一个已经从一个长字符串拆分的字符串数组元素了。它的工作原理如下: 从文件创建字符串。此字符串以空行(\ n \ n)分割,这些行基本上是文本段落,在其他地方用作正文。 每个段落以主题开头,后跟星号,后跟正文。 这是问题 - 迭代每个段落的字符串元素将它们拆分为星号字符(当然是转义),这太简单了。为了证明,第一部分运作良好:

sections = formatted.split("\n\n");  //sections previously declared as string array
int lines = sections.length ;
for(int i= 0 ; i< lines; i++) {
    sections[i] = "Heading\n\n" + sections[i] ;

现在,当尝试在每次迭代中执行另一个任务时(是的,只是在你的脑海中加入两个代码窗口),它会在第二个结果索引上抛出NPE:

    String paragraph = sections[i];
    String[] half = paragraph.split("\\*");
    topics[i] = half[0];    //Topics also previously declared as array
}

迭代器内的最后一行抛出一个NPE(不超出界限)。我不知道它是否是我或者索引。

我真的很感激理解为什么这不起作用。也许是因为我似乎总是在午夜之后很好地解决这些问题......

如何构建这两个并行实例数组?谢谢!

1 个答案:

答案 0 :(得分:2)

我觉得Topics是空的 - 在您显示的代码中没有任何内容可以为其分配非空值。你可能想要:

Topics = new String[lines];
在循环之前

。您也应该能够在调试器中轻松发现这一点。 (如果您对NPE的来源感到困惑,通常首先添加诊断和/或调试。)

另请注意,传统上您的变量将被称为sectionstopics,因为Java中的变量通常是camelCased。