-1

ここでヌルポインタ例外が発生する理由を誰か教えてもらえますか? コードを調べたところ、それを行っている可能性のある場所は見つかりませんでした。少し困惑しています。どんな助けでも大歓迎です:D.

ちなみに、このメソッドは、指定された文字間で文字列を分割することになっています。たとえば、次のようになります。文字列を各セミコロン (分割する指定文字) で分割し、"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 個の文字列の文字列の配列が作成され、参照が変数 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++) {

また、最初にリストを生成するときにベクターを使用し、その後通常の配列に変換することをお勧めします。

于 2013-10-13T02:35:34.627 に答える
0

初期化していないため、配列の出力はnullです。
代わりに

public static String[] output;

行う

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