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

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

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

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

Q&A

解決済

6回答

59307閲覧

Stringクラスがnullか空文字列かを判定する方法

izuki_y

総合スコア65

Java

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

0グッド

0クリップ

投稿2016/12/27 06:23

編集2017/01/11 13:02

はじめに

いつもお世話になっております。
表題の事で質問があります。

あるListに格納されたStringクラスを判定して
null もしくは 空文字列の場合は falseを返す様にしたいです。

リストから取ってくる箇所は簡略して以下の様に修正しました。
しかしこの修正はプロっぽくないのでは?と思いました。
特に判定の前後を入れ替えるとExceptionが発生するとかありえないのでは?と思い
この判定はありなのか?

あるいは他の方法があるのかを教えて頂きたく投稿しました。
よろしくお願いいたします。

public class Test{ /* st が null か空文字列の場合にerrorを表示する */ public static boolean main(String []args){ String st = null; /* これだと間抜けっぽい気がする */ // if(st == null){ // return false; // } // if(st.isEmpty()){ // return false; // } /* これだと正しく動くけど判定が逆になるとExceptionを起こすから可読性や保守に問題がある様な気がする */ if( st==null || st.isEmpty() ){ System.out.print("result value is false"); return false; } // /* これだとstにnullが入った場合はNullPointerExceptionを起こす */ // if( st.isEmpty() || st==null ){ // System.out.print("result value is false"); // return false; // } } }

遅くなって申し訳ありませんでした。
確認させて頂きました。
全員の方から問題ないとお墨付きを頂きとても安心しております。

ベストアンサーを選ぶのはとても迷いましたが、プロの目から見て間違いないと言い切ってくれた方につけさせて頂きました。

本当にありがとうございました。

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

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

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

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

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

guest

回答6

0

ベストアンサー

/* これだと正しく動くけど判定が逆になるとExceptionを起こすから可読性や保守に問題がある様な気がする */
if( st==null || st.isEmpty() ){

この書き方で特に問題ありません。プロから見ても普通のコーディングだと思います。
ひと目みて逆に書くと Exception を起こすことがわからないような素人が保守した時点でもっと不幸なことがたくさん起きると思います。

投稿2016/12/27 06:49

mit0223

総合スコア3401

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

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

0

「アリかナシか」
で言うとアリですが、メソッド化しておくと、なお良いと思います。

一度、メソッドを作ってしまえば後はそれを呼び出すだけで何度でも再利用できますし、
以下のようにコメントしておけば、下手な修正を入れられることも防げると考えるからです。

java

1public static boolean isNullOrEmpty(String str) { 2 /* 3 * 判定が逆になるとExceptionを起こすから、逆にするなよ? 4 * 絶対にするなよ? 5 */ 6 return str == null || str.isEmpty(); 7}

もし、Jarファイルの追加が手間でなければ、Apache Commons の`Commons Lang'ライブラリが便利です。

https://commons.apache.org/proper/commons-lang/

StringUtilsクラスのisEmptyメソッドが、まさにご質問のケースで利用できます。
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isEmpty-java.lang.CharSequence-

Checks if a CharSequence is empty ("") or null.

以下がその実装ですが、ご質問のコードとほぼ、同じことをしていますね。
http://grepcode.com/file/repo1.maven.org/maven2/commons-lang/commons-lang/2.6/org/apache/commons/lang/StringUtils.java#StringUtils.isEmpty%28java.lang.String%29

投稿2016/12/27 07:25

KiyoshiMotoki

総合スコア4791

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

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

0

/* これだと正しく動くけど判定が逆になるとExceptionを起こすから可読性や保守に問題がある様な気がする */ if( st==null || st.isEmpty() ){

プロなら短絡評価の考えは知っているべきで、不用意に判定を逆にするというのはしないはずです。プロであるならむしろ上記のような書き方を理解したうえで書いていそうなものです(個人的な感想)

投稿2016/12/27 07:12

hitsujimeeee

総合スコア486

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

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

0

StringUtils.isEmpty()を使えば、nullまたは""だった場合にtrueになります。

投稿2016/12/27 06:51

s.t.

総合スコア2021

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

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

0

java

1if(st==null || st.isEmpty()) 2 3if(st!=null && !st.isEmpty())

この手の書き方はもはや常套句として使っていいのでは?
逆になると例外になるとか心配していますが、むしろもっと簡単な「|や&をひとつ消す」という危険を考えないのはなぜなんだろう…

投稿2016/12/27 14:35

swordone

総合スコア20651

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

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

0

java

1if (st == null ? true : st.isEmpty()) {

のように3項演算子で判定もできますが、if( st==null || st.isEmpty() ){の方がシンプルですね。

投稿2016/12/27 06:58

Y.H.

総合スコア7914

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問