0

私はクラスの学習問題に取り組んでおり、本質的に文字列と文字を読み取ります。文字は区切り文字です。次に、区切り文字の文字列を検索し、区切り文字が見つかった回数と同じ長さの配列を作成します。次に、各文字または文字列を配列内の独自の場所に割り当てて返します。

考えすぎかもしれませんが、さまざまな文字列メソッドに依存せず、独自のメソッドを作成するのが最善です。このメソッドを取得して、読み取った文字列/文字のみを配列内の 1 つの位置に割り当て、すべてではなく、不要な出力を追加しないようにするにはどうすればよいですか? ヘルプ/提案は大歓迎です

public static String[] explode(String s, char d){
    String []c;
    int count = 1;
    //checks to see how many times the delimter appears in the string and creates an      array of corresponding size
    for(int i = 0; i < s.length(); i++){
        if(d == s.charAt(i))
            count ++;
    }
    c = new String [count];
    //used for checking to make sure the correct number of elements are found
    System.out.println(c.length);
    //goes through the the input string "s" and checks to see if the delimiter is found
    //when it is found it makes c[j] equal to what is found
    //once it has cycled through the length of "s" and filled each element for c, it returns the array
    for(int i = 0; i < s.length(); i++){
            for(int j = 0; j < c.length; j++){
                if(d == s.charAt(i))
                    c[j] += s.substring(i-1);
            }
    }
    //provides output for the array [c] just to verify what was found
    for(int y = 0; y < c.length; y++)
        System.out.println(c[y]);
    return c;
}
public static void main(String [] args){
    String test = "a,b,c,d";
    char key = ',';
    explode(test,key);
}


    ^The following will output:
    4
    nulla,b,c,db,c,dc,d
    nulla,b,c,db,c,dc,d
    nulla,b,c,db,c,dc,d
    nulla,b,c,db,c,dc,d

    I'm aiming for:
    4
    a
    b
    c
    d

ありがとうございました

4

1 に答える 1

0

おそらく、次のようなことを試すことができます。

public static void main(String[] args){
    explode("a,b,c,d", ',');
}

public static void explode(final String string, final char delimiter){
    int length = 1;
    for(final char c : string.toCharArray())
        if(delimiter == c)
            length++;
    if(length == 1)
        return;
    final String[] array = new String[length];
    int index, prev = 0, i = 0;
    while((index = string.indexOf(delimiter, prev)) > -1){
        array[i++] = string.substring(prev, index);
        prev = index+1;
    }
    array[i] = string.substring(prev);
    System.out.println(length);
    for(final String s : array)
        System.out.println(s);
}

上記のプログラムの出力は次のとおりです。

4

a

b

c

d

または、List<String>代わりに (および Java 8) を使用する場合は、次のようにして数行を削除できます。

public static void explode(final String string, final char delimiter){
    final List<String> list = new LinkedList<>();
    int index, prev = 0;
    while((index = string.indexOf(delimiter, prev)) > -1){
        list.add(string.substring(prev, index));
        prev = index+1;
    }
    list.add(string.substring(prev));
    System.out.println(list.size());
    list.forEach(System.out::println);
}
于 2013-09-09T01:45:14.810 に答える