-1

谁能告诉我为什么我在这里得到一个空指针异常?我检查了代码并没有找到任何可能这样做的地方,我有点难过。任何帮助将不胜感激: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

4 回答 4

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"
// ...
于 2013-10-13T02:32:59.367 回答
0

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

你有

public static String[] output;

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

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

public static String[] output = new String[1000];
于 2013-10-13T02:34:10.803 回答
0
  1. 您的输出数组永远不会被初始化。
  2. 您的 for 循环计数超出了“iString”的范围。

substringChars方法的开头,添加以下内容:

output = new String[3];

并将您的 for 循环更改为使用 < 而不是 <=。

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

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

于 2013-10-13T02:35:34.627 回答
0

您的 Array 输出为空,因为您尚未对其进行初始化,
而不是

public static String[] output;

public static String[] output = new String[3];
于 2013-10-13T02:41:25.443 回答