0

文字が表示されるたびに文字列を配列に分割しましたが、配列内の各文字列をさらに多くの配列に分割して、別の文字が表示され、各分割の下に文字を削除して配列を追加します。

これが私のコードです:

private String input = "118u121u23n24"
private int y = 0;
private String[] split_main = new String[100];
private void split_u(){
        String[] split = input.split("u");
        for(int x=0; split.length>x; x++){
            split_main[y] = split[x];
            if(split.length>x+1)
                split_main[y+1] = "+";
            y +=2;
        }

これにより、文字列が次のような配列に分割されます。「u」が表示されるたびに新しい配列が作成され、プラスが追加されます。

118
+
121
+
23n24

ここで、これらの各配列を調べて、文字nを探し、それを別の行に配置して、これが新しい配列になるようにします。ただし、これを試すたびに、配列でSplitメソッドを再度使用できないように見えるため、エラーが発生します。分割を使用できない場合、それを行う別の方法はありますか?

118
+
121
+
23
n
24

助けてくれてありがとう。

4

3 に答える 3

2

これを試して

String[] split = input.split("u|n");

u|n文字列をbyuまたはnで分割することを意味します。文字列を2つの区切り文字で分割するだけです。

2つのレベルで異なるセパレータを追加したい場合は、次のようなコードを作成する必要があります。

    String input = "118u121u23n24";
    String[] s2;
    ArrayList<String> main = new ArrayList<String>();

    String[] split = input.split("u");
    for(int x=0; split.length>x; x++){
        s2 = split[x].split("n");

        for(int k=0; k<s2.length; k++){
            main.add(s2[k]);
            if(s2.length>k+1)
                main.add("n");
        }

        if(split.length>x+1)
            main.add("+");
    }
    // print main array to test
    for(int i=0;i<main.size();i++)
        System.out.println(main.get(i)); 
于 2012-10-04T20:36:06.147 に答える
1

正規表現を使用して、すべての文字を一度に分割することをお勧めします。

String[] split = input.split("(+|n)");

中間ステップが必要な場合、それを行う唯一の方法は、最初の分割を繰り返し、2番目の文字で分割の結果の配列を作成することです。複数の分割パターン(「+」と「n」だけでなく)に対してこれを実行する場合は、汎用の手順が必要になります。サンプルコードは次のとおりです。

/**
 * Replaces one element of a list of strings with the results of
 * splitting that element with a given pattern. A copy of the pattern
 * is inserted between the elements of the split.
 * @param list The list of elements to be modified
 * @param pattern The pattern on which to split
 * @param pos The position of the element to split
 * @return The number of additional elements inserted. This is the amount by
 *         which the list grew. If the element was not split, zero is returned.
 */
int splitElements(List<String> list, String pattern, int pos) {
    String[] split = list.get(pos).split(pattern);
    if (split.length > 1) {
        list.set(pos++, split[0]);
        for (int i = 1; i < split.length; ++i) {
            list.add(pos++, pattern);
            list.add(pos++, split[i]);
        }
    } // else nothing to do
    return (split.length << 1) - 1;
}

次に、分割する各文字でこれを呼び出します。

private String input = "118u121u23n24";
private ArrayList<String> split_main = new ArrayList<String>();
split_main.add(input);
splitElements(split_main, "+", 0);
for (int i = 0; i < len; ++i) {
    i += splitElements(split_main, "n", i);
}
于 2012-10-04T20:35:21.530 に答える
0

それが可能だ。配列の代わりに使用Listすると、新しいアイテムを簡単に挿入できます。

配列のみが必要な場合は、2つのパスで実行します。最初に、input必要なセルの数を繰り返してカウントしn、次に適切なサイズの新しい配列を作成inputして内容をコピーし、途中で分割します。

于 2012-10-04T20:36:40.110 に答える