空索引异常是不期望的

时间:2013-10-13 02:28:39

标签: java

谁能告诉我为什么我在这里得到空指针异常?我检查了代码并没有找到可能正在做的任何地方,我有点难过。任何帮助将不胜感激:D。

顺便说一句,该方法应该在指定的字符之间拆分字符串,例如:substringChars(“sectionA; sectionB; sectionC;”,“;”);会在每个分号(要分割的指定字符)之间拆分字符串,并返回带有“sectionA”“sectonB”和“sectionC”的字符串数组

代码:

package substringChars;

public class SubstringChars {
    public static void main(String[] args) {
        substringChars("sectionA; sectionB; sectionC;", ';'); //There is an error on this line
        System.out.println(SubstringChars.output[0] + SubstringChars.output[1] + SubstringChars.output[2]);
    }
    public static String[] output;
    public static void substringChars(String iString, char sChar) {
        int pChar = 0, outputSlot = 0;
        char selectedChar;
        for(int i = 0; i <= iString.length(); i++) {
            selectedChar = iString.charAt(i);
            if(selectedChar == sChar) {
                if(i != iString.length()) {
                    SubstringChars.output[outputSlot] = (iString.substring(pChar, i)); //There is an error on this line
                }
                if(i == iString.length()) {
                    SubstringChars.output[outputSlot] = (String)(iString.substring(pChar));
                }
                pChar = i;
                outputSlot++;
            }
        }
    }
}

错误:

Exception in thread "main" java.lang.NullPointerException
    at substringChars.SubstringChars.substringChars(SubstringChars.java:16)
    at substringChars.SubstringChars.main(SubstringChars.java:5)

谢谢您的帮助!

4 个答案:

答案 0 :(得分:0)

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

String中有一个名为split(String regex)的函数可以执行与您尝试执行的操作相同的操作。你应该使用它,除非你是试图重新编码轮子的一些原因。

String str = "hello;my;name;is;saigon"
String a[] = str.split(";")
// a[0] = "hello"
// a[1] = "my"
// a[2] = "name"
// ...

答案 1 :(得分:0)

您正在使用未初始化的变量!

你有

public static String[] output;

永远不会未初始化,当您尝试使用它来存储数组时,它使用null(不存在的对象)。

这将创建最多1000个字符串的String数组,并在变量输出中存储引用:

public static String[] output = new String[1000];

答案 2 :(得分:0)

  1. 您的输出数组永远不会被初始化。
  2. 你的for循环计数超过'iString'的范围。
  3. substringChars方法的开头,添加以下内容:

    output = new String[3];
    

    并更改你的for循环使用&lt;而不是&lt; =。

    for(int i = 0; i < iString.length(); i++) {
    

    另外,我建议先使用Vector生成列表,然后再转换为普通数组。

答案 3 :(得分:0)

您的Array输出为null,因为您尚未初始化它,
而不是

public static String[] output;

DO

public static String[] output = new String[3];