-1

2 つの区切り記号の間のテキストを出力するプログラムを作成しようとしています。

たとえば、文字列"superior sanguine bears"では、 を含む長さ 4 の配列を返します"" "uperior" "anguine bear" ""

以下は私のコードです。私が直面している問題は、行で java.lang.ArrayIndexOutOfBoundsException: 23 を取得していることですresult[arrayLength] = s.substring(beginIndex, endIndex);

public static String[] explode(String s, char d)
{
    String[] result;
    int stringLength;
    int beginIndex, endIndex;
    beginIndex = 0;
    endIndex = 0;
    int arrayLength = 0;

    stringLength = s.length();//set stringLength equal to length of string s
    result = new String[stringLength];

    for(int i = 0; i < stringLength; i++)
    {
        if(s.charAt(i) == d)
        {
            if(i == 0)
            {
                result[arrayLength] = "";
                arrayLength++;
            }
            beginIndex = i+1;
            System.out.println("beginIndex" + beginIndex);
        }


        for(int j = i+1; j < stringLength; j++)
        {
            if((s.charAt(j) == d) || (j == stringLength-1))
                endIndex = j;

            if(beginIndex == endIndex)
            {
                result[arrayLength] = s.substring(beginIndex);
                arrayLength++;
            }
            else if(endIndex > beginIndex)
            {
                System.out.println(endIndex);
                result[arrayLength] = s.substring(beginIndex, endIndex);
                arrayLength++;

            }
        }
    }


    return result;
}

public static void main(String[] args)
{
    String s = "superior sanguine bears";
    char d = 's';
    String[] answer = explode(s, d);

    System.out.println(Arrays.toString(answer));
}
4

2 に答える 2

1

存在しないインデックスを読み取ろうとしているため、ArrayIndexOutOfBoundsException が発生しています。配列インデックスは 0 から始まり、n-1 要素まで続きます。以下のコードを使用してください:

String string = "superior sanguine bears";
String[] parts = string.split("s", -1);
System.out.println(parts);

十分なはずです。注:「s」が区切り文字であると想定しています。

于 2013-09-11T04:06:22.960 に答える
0

あなたはこのようにすることができます

    package code.java.test;


import java.util.ArrayList;
import java.util.List;

public class Main {
    public static List<String> explode(String s, char d)
    {
       List<String> ret = new ArrayList<String>();
       int beginIndex =0;
       int endIndex = 0;
       while((endIndex = s.indexOf(d, beginIndex)) != -1){
           ret.add(s.substring(beginIndex, endIndex).trim());
           beginIndex = endIndex+1;
       }
       ret.add(s.substring(beginIndex, s.length()));
       return ret;

    }

    public static void main(String[] args)
    {
        String s = "superior sanguine bears";
        char d = 's';
        List<String> answer = explode(s, d);

        System.out.println(answer.toString());
    }
}

O/P: [, アッパー, アンギンベア, ]

于 2013-09-11T04:36:51.930 に答える