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

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

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

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

Q&A

解決済

5回答

8807閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2017/01/24 03:39

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

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]の入力が無い場合にエラーになってしまうようです。

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

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

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

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

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

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

guest

回答5

0

ベストアンサー

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

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

投稿2017/01/24 03:48

編集2017/01/24 03:51
carimatics

総合スコア740

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

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

carimatics

2017/01/24 03:49

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

退会済みユーザー

2017/01/25 13:33

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

0

ひょっとして

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

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

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

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

投稿2017/01/24 07:00

A-pZ

総合スコア12011

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

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

abs123

2017/01/24 07:22

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

2017/01/24 07:51

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

2017/01/24 15:10

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

2017/01/25 00:20

入りません
退会済みユーザー

退会済みユーザー

2017/01/25 13:47

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

0

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

java

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

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

投稿2017/01/24 03:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/01/25 13:34

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

0

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

java

1class A4{ 2 3public static void main(String[] args){ 4 5String test = "123;123;;"; 6 7String[] y=new String[3];//yに分割結果が入る 8 9for(int i=0;i<3;i++){ 10y[i]=test.substring(0,test.indexOf(";")); 11test=test.substring(test.indexOf(";")+1,test.length()); 12if(y[i].equals(""))y[i]="0"; 13System.out.println(y[i]+"-"); 14} 15 16 17} 18 19 20 21}

投稿2017/01/24 04:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yuba

2017/01/24 14:53

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

2017/01/24 14:56

何の解決にもなっていないと思う…
退会済みユーザー

退会済みユーザー

2017/01/24 19:00 編集

>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 13:41

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

0

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

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

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

投稿2017/01/24 03:51

hikochang

総合スコア648

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

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

carimatics

2017/01/24 03:53

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

2017/01/24 05:36

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問