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

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

ただいまの
回答率

90.53%

  • Java

    15547questions

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

javaでスプリットしたもののnull?判定

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 2,269
退会済みユーザー

退会済みユーザー

タイトルに書いた内容とは具体的に言えば違う部分があるのですが、
現在下記のような状態です。

test  = "123;234;567;"

これをスプリットして、

test[1]=123
test[2]=234
test[3]=567

みたいに分けてそれぞれをメソッドの引数に指定してあるのですが、
この test[3] が入力されている場合とない場合があり
エラーになってしまいます。

そこで
string hoge =null
if(test[3] != null)hoge = test[3]

みたいにして、このhogeを引数に指定してみたのですが
やっぱりtest[3]の入力が無い場合にエラーになってしまうようです。

どうすれば解消できるでしょうか?
ご教授お願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+2

配列長のチェックが一番楽ですかね…。

String s1 = test[1];
String s2 = test[2];
String s3;
if (test.length == 4) {
    s3 = test[3];
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/24 12:49

    インデックスや条件式部分は必要に応じて書き換えてください。

    キャンセル

  • 2017/01/25 22:33

    返事遅れてすみません、
    お教え頂いた方法で成功しました!
    ありがとうございます。

    キャンセル

+1

test.lengthでスプリットした配列の長さを求めて

if(test.length==3){//testの要素が3つあるとき
}
else{
}


上記のようにif文で判定すればいいと思いんす。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/25 22:34

    返事遅れてすみません、
    lengthでの判定で成功できました!
    ありがとうございます。

    キャンセル

+1

ひょっとして

String target = "123;456;789;"; に対して、

String[] splited = target.split(";");

した結果でしょうかね。それなら配列番号に3はありえなく、

splited[0] ,splited[1], splited[2] のように、0が開始番号です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/24 16:22

    if(test[3] != null)この時点で、
    ArrayIndexOutOfBoundsExceptionが発生し、
    落ちているものと推測できますね。

    キャンセル

  • 2017/01/24 16:51

    なのでtest[3]はないでしょう。2までしかありません。

    キャンセル

  • 2017/01/25 00:10

    これだと3番目に空文字が入りません?

    キャンセル

  • 2017/01/25 09:20

    入りません

    キャンセル

  • 2017/01/25 22:47

    すいません、開始番号など色々と質問の書き方が間違っていました。
    3つ目の値が入力されていない場合
    test = "123;234;"
    となって
    test[2]がそもそも存在しない場合が出てきて、
    それをどう判定すれば良いのかがわからない状態でした。
    今回はlengthを使うことで解決することができました。

    ご回答ありがとうございました!

    キャンセル

0

if (test[3]) {
test[3]=hoge;
}

無効を判定する場合は
if( !test[3] )

有効を判定する場合は
if( test[3] )

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/24 12:53

    Javaではifの条件式の評価値はbooleanでないとコンパイルエラーになります。

    キャンセル

  • 2017/01/24 14:36

    何か勘違いしました、、、
    Javaですね。

    キャンセル

-3

.splitを用いず
入力がない場合代わりに"0"を入れるコードです

class A4{

public static void main(String[] args){

String test  = "123;123;;";

String[] y=new String[3];//yに分割結果が入る

for(int i=0;i<3;i++){
y[i]=test.substring(0,test.indexOf(";"));
test=test.substring(test.indexOf(";")+1,test.length());
if(y[i].equals(""))y[i]="0";
System.out.println(y[i]+"-");
}


}



}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/24 23:53

    split使わずに行くならScanner使うのが普通なんじゃないですかね。

    キャンセル

  • 2017/01/24 23:56

    何の解決にもなっていないと思う…

    キャンセル

  • 2017/01/25 01:57 編集

    >split使わずに行くならScanner使うのが
    Scannerを使って分割する方法が分かるのでしたら具体的に示していただければ解決して質問者の方は助かるかも知れませんね いえ別に示していただけなくとも問題はないですが

    >この test[3] が入力されている場合とない場合があり
    「ない場合」に
    123;123;;のようになっているか
    123;123;
    のようになっているかで違います
    123;123;
    のようになっているなら解決にはならないでしょう test[3]と言っても実際にはtest[2]ですが
    今回質問者の方は.splitすると結果を入れたString[]の配列の長さが3になったり2になったりしてその後に書いているコード内で[2]の部分を使用しているのに[2]の部分が存在していない場合が出て困っているように見えたので[0][1][2]の部分がいつでも(;;;の間に値が入っていようといまいと)存在するようなコードを組んで見ただけです .splitを使うのが前提だと言うのなら意味はないでしょうけど 今回.splitするとどうしても[0][1]しか配列が生成されない場合が出て来るので[2]を.splitした以降で用いていてそこを変更したくないのであれば.splitを用いる方法自体上記したものなど別の方法に変える必要があるのではないかと思います .split内で正規表現をうまく使って常に[0][1][2]部分が生成されるようにする方法もあるのかも知れませんが 今のところ思いつきません 今回上で
    test[1]=123
    test[2]=234
    test[3]=567
    と書いていても実際には
    test[0]=123
    test[1]=234
    test[2]=567
    になると思いますが、もしそこを質問者の方が理解せずに.splitした以降で本当に(比喩でなく)test[3]を用いているのであればそもそも最初から.split以降で用いているtest[3]を用いた部分には数値が入るはずもないので配列の長さ以前の、配列を生成すると最初は[0]から添字が開始するという理解が足りない事が原因になって起きた問題なのかも知れません 分割の方法によっては[0]に何らかの値が入った後[1]に最初の数値が入ることがあるかも知れないので、その場合は
    test[1]=123
    test[2]=234
    test[3]=567
    でも問題ないです

    >何の解決にもなって
    どのあたりが解決になっていないのか書いていただけなければどうしようもありません

    キャンセル

  • 2017/01/25 22:41

    ご回答ありがとうございました、
    おっしゃる通りで自分のsplitの理解が浅く
    test[3]に値が入らない場合、test[3]そのものが存在しなくなる事についてわかってませんでした。
    以前jQueryではsplitしたら空文字になったので、
    そのまま勘違いしていたようです。。
    ご回答ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • Java

    15547questions

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