1

以下のような文字列があるとします

String s1 = "test1=1&test2=2&test3=&test4=4";

値がないため、文字列 S1 の test3 パラメータに注意してください。

String [] splitS1 = s1.split("\\&");
for (int i = 0; i < splitS1.length; i++) {
    String[] params = splitS1[i].split("=");
    System.out.println("Attribute:"+params[0]+"   Value : "+params [1]);
}

上記のコードは java.lang.ArrayIndexOutOfBoundsException: 1 をスローします。これは、文字列 s1 の test3 に値がないため、params[1] が test3 に対して有効でないためです。

私はこれをやってみました

                if(params.length == 1) {
                    params[1] = "";
                }

しかし、配列を拡張できないことはわかっています。ここで何ができるでしょうか?

ありがとう!

4

5 に答える 5

7

1 つのsplitパラメーターを受け取るメソッドは、後続の空のトークンを破棄します。ここではparams、長さは 1 しかありません。

パラメータsplitも取るメソッドをlimit使用し、limit実際に存在するトークンの数と一致する長さの配列を確実に取得するために負を渡します: 2.

String[] params = splitS1[i].split("=", -1);

その後、別の配列を作成する必要はありません。2プレゼントがあると仮定して、最初にサイズの配列を取得します=

于 2013-07-18T19:02:48.523 に答える
2

パラメータを表すクラスを、その名前と値で作成し、文字列を解析します。

public final class Parameter {

    private final String name;
    private final String value;

    public Parameter(String name, String value) {
        this.name = name;
        this.value = value;
    }

    public static Parameter parse(String s) {
        String[] parts = s.split("=");
        String name = parts[0];
        String value = "";
        if (parts.length > 1) {
            value = parts[1];
        }
        return new Parameter(name, value);
    }

    public String getName() {
        return name;
    }

    public String getValue() {
        return value;
    }

    // add more behavior if needed.
}

そして今、あなたはできる

for (int i = 0; i < splitS1.length; i++) {
    Parameter param = Parameter.parse(splitS1[i]);
    System.out.println("Parameter:" + param.getName() + " = " + param.getValue());
}
于 2013-07-18T19:09:12.460 に答える
2

最も簡単な方法は、配列の長さをテストすることです。

String splitS1 = s1.split("\\&");
for (int i = 0; i < splitS1.length; i++) {
    String[] params = splitS1[i].split("=");
    System.out.println(
        "Attribute: " + params[0] +
        "   Value : " + (params.length < 1 ? "<no value>" : params[1]));
}

printfの代わりに使用する価値があるかもしれませんprintln:

System.out.printf("Attribute: %1$s%n   Value : %2$s%n",
                  params[0],
                  params.length < 1 ? "<no value>" : params[1]
);
于 2013-07-18T19:06:57.347 に答える
0

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

String s1 = "test1=1&test2=2&test3=&test4=4";
    String[] splitS1 = s1.split("\\&");
    for (int i = 0; i < splitS1.length; i++) {
        String[] params = splitS1[i].split("=");
        String[] para=new String[2];
        if(params.length==1) {
            para[0]=params[0];
            System.out.println("Attribute:"+para[0]+"   Value : "+para [1]);

        }
        else{
            System.out.println("Attribute:"+params[0]+"   Value : "+params [1]);

        }
    }

また

     if(params.length==1) {
            System.out.println("Attribute:"+para[0]+"   Value : "+"");

        }
        else{
            System.out.println("Attribute:"+params[0]+"   Value : "+params [1]);

        }
于 2013-07-18T19:10:33.683 に答える