質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1735閲覧

Javaでのspilitの使い方を教えてください

White_Rabbit

総合スコア38

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/12/15 02:31

Javaでプログラムを作っています。

=================
=================

String para = "a=1&b=2&c=3&d=4=5";

とした場合("d=4=5"に注目)、


下記で、d項目に、値"4=5"が入らないのですが、
下記のどこを修正すればよろしいでしょうか?


String[] aaa = para.split("&");

for(int iII = 0; iII < aaa.length; iII++){

String[] bbb = aaa[iII].split("="); if ((bbb != null) && (bbb.length == 2)) { h_para.put(bbb[0], bbb[1]); }

}

以上

※Javaですが、変数名の付け方や、変数名などについてのご指摘はご不要です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

String[] bbb = aaa[iII].split("=", 2);

試してください。

投稿2015/12/15 02:47

liguofeng29

総合スコア801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

White_Rabbit

2015/12/15 03:56

ご回答ありがうございます。 これだと、bbb[0], bbb[1]の2つのみに分割で、 c項目に、"3&d=4=5"が、入るとうことですね。 処理がきれいなので、これでやってみます。 ありがとうございます。
liguofeng29

2015/12/15 05:44

違うと思います。 h_paraには{d=4=5, b=2, c=3, a=1}が入りますよ。
White_Rabbit

2015/12/15 06:09

たった、", 2"を入れただけで、上手くいきました。 ありがとうございました。 最適なご対応方法をありがとうございました。
guest

0

if分岐で設定しない場合があることを考えると、設定されていないということは条件に当てはまっていないのでは、と想像がつくかと思います。

java

1String[] aaa = para.split("&"); 2for (int iII = 0; iII < aaa.length; iII++) { 3 4 String[] bbb = aaa[iII].split("="); 5 6 if ((bbb != null) && (bbb.length == 2)) { 7 8 h_para.put(bbb[0], bbb[1]); 9 10 } else { 11 System.out.println("else! bbb.length: " + bbb.length + " (" + Arrays.toString(bbb) + ")"); 12 } 13 14}

bbb.length3なためですね。


おそらく所望の動作は[こちら](https://docs.oracle.com/javase/jp/6/api/java/lang/String.html#split(java.lang.String, int))の、引数を2つ採るString#split(String,int)かと。

java

1String[] bbb = aaa[iII].split("=", 2);

で想定の動作となると思います。


(コメントを受けて追記)

上記文中に示した、引数2個のsplitメソッドのリンク先説明を読んでいただきたいのですが、第2引数で指定した2は、最大で2個に分割する、という意味です。ですので、書かれている

java

1if ((bbb != null) && (bbb.length == 2)) { 2// 省略 3} else { 4 System.out.println("else! bbb.length: " + bbb.length + " (" + Arrays.toString(bbb) + ")"); 5 for (int i = 1; i < bbb.length; i++) { 6 bbb[1] = bbb[1] + bbb[i]; 7 } 8 h_para.put(bbb[0], bbb[1]); 9}

elseに入るのは、bbbnullか、lengthが2未満(つまり0か1)のときだけです。
このようなとき、else内に書かれているfor文の中に入ることはありません。

data= aa=yy,hhhjjj=っghsplit("=", 2)で2個に分割されますので、elseではなくifの方に入ります。

投稿2015/12/15 02:41

編集2015/12/15 06:11
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

White_Rabbit

2015/12/15 03:53

ご回答ありがとうございます。 早速、やってみたところ、ご指摘通りでした。 「~&c=3&data= aa=yy,hhhjjj=っgh」は、 > else! bbb.length: 4 ([c, aa, yy,hhhjjj, っgh]) となりました。 従って、下記のように修正する予定です。 if ((bbb != null) && (bbb.length == 2)) { h_para.put(bbb[0], bbb[1]); } else { System.out.println("else! bbb.length: " + bbb.length + " (" + Arrays.toString(bbb) + ")"); for (i = 1; i < bbb.length; i++) { bbb[1] = bbb[1] + bbb[i]; } h_para.put(bbb[0], bbb[1]); } これで、デグレがでないか、本当にうごくか心配ですが、 これしか思いつかないので、これにしようと考えています。 もっと良いアイデアがありましたら、教えていただけると幸いです。 お手数をお掛け致しました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問