• ベストアンサー

文字列の比較

いつも参考にさせて頂いています。 基本的なことなのですが、宜しくお願いします。 たとえば文字列"str"の空チェックをするとします。 -------------------以下参考ソース String str = "test"; 1. public static String isBlank(String str) { if(str == null || str.equals("")) { return true; } return false; } 2. public static String isBlank(String str) { if(str == null || str.length = 0) { return true; } return false; } ■1と2の違いって何かありますでしょうか? ■空チェックなら1と2のどちらを使うべきでしょうか? 以上宜しくお願いします。

  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • i2719
  • ベストアンサー率35% (11/31)
回答No.3

str == null || str.length() == 0 私なら、毎度上記のように書きますね。 条件が反対の時は以下のように書きます。 str != null && str.length() > 0

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>isNull isBlank 両方は作りません。 >普通は作るもんなんでしょうか? 普通はどちらも作らないということが言いたかったのです。 str.equals("") と str.length == 0 の違いはさて置き、明確に「意味」がわかるようにコードの状態を保つことが重要です。 コードのどこかに if ( !isBlank(myString) ) { ... } と書いてあったとして、ブロックの中が myString が未設定(null)の場合も実行されるとは誰も思わないし、いちいち isBlank() の実装を確認するのか?ということです。 myString が「未設定(null)あるいは空("")の場合」をセットで頻繁にチェックする必要があるならば、まずは設計がおかしいことを疑って下さい。通常、変数は null のまま長時間放っておかれるものではないと思います。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>■空チェックなら1と2のどちらを使うべきでしょうか? どちらも使うべきではないと思う。 変数 str に値がセットされていない(null)ことと、空の文字列がセットされている("")ことは意味が違うので、それに isBlank() と名前を付けるのは要らぬ誤解を招くでしょう。

pgBeginImo
質問者

お礼

早速の回答ありがとうございます。 私の説明不足でしたね。申し訳ないです。 空チェックは null も "" も含む場合としてることが前提です。 isNull isBlank 両方は作りません。 普通は作るもんなんでしょうか? もしよければそのこともふまえてご意見を頂けたらうれしいです。 宜しくお願いします それと訂正ですが、質問欄で提示しているソースのメソッド(isBlank)の戻り値は (正)boolean (誤)String です。宜しくお願いします。

関連するQ&A

  • javaプログラムについて

    mainメソッド内の指定された部分の処理を、 別のメソッドに分けてください。 mainメソッド内から作成した別メソッドを呼び出して 実行できるようにしてください。 ※分ける前と分けた後で処理結果が変わらないこと (入力された文字が"A"の場合true, それ以外の場合falseを返すように) */ class MethodAdd1{ public static void main(String[] args){ /* // ★ここから if("A".equals(args[0])){ judge = true; }else{ judge = false; } // ★ここまで */ boolean judge; if("A".equals(args[0])){ System.out.println("true"); }else{ System.out.println("false"); } } /* **戻り値:boolean **引数:String */ //ここにメソッドを作成 public static boolean equals(String a){ String str="A"; if("A".equals(str)){ return true; }else{ return false; } } } これで一応trueかfalseと表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。

  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • オブジェクトの比較と文字列の比較の違い

    今、基本情報技術者の勉強でJavaを勉強しているのですが、持っているテキストの問題で分からないものがありました。 String str1 = "Hello."; String str2 = "Good, Bye."; String str3 = str1; String str4 = str1 + str2; とすると、 (A)str1 == str2; がfalse (B)str1.equals(str3); がtrue というのは分かるのですが、 (C)str4 == "Hello.Good, bye."; がなぜfalseになるのでしょうか? ==はオブジェクトの比較で、equlasは文字列の比較だと書いているのですが、よく違いが分かりません。 また、 上の4つの処理の後に str3 = "test"; という処理を行っているのですが、このときの状況は、 str1はHello.のままで、 str3のみがtestになっている、と理解したのですがそれで合っているのでしょうか?

    • ベストアンサー
    • Java
  • for文

    質問お願い致します。 これのソースのfor文を一つの文にするにはどのように書いたらよいでしょうか? お願い致します。 //指定された文字列が"a"と"b"の両方を含む場合はtrue、なければfalseを返す public class Mondai { public static void main(String[] args) { System.out.println("解答 :" + charBothContain("Habllow")); } public static boolean charBothContain(String str) { boolean answer1 = false; boolean answer2 = false; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'a') { answer1 = true; break; } } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'b') { answer2 = true; break; } } return answer1 && answer2; } }

    • ベストアンサー
    • Java
  • 文字列の配列の比較

    こんにちは。タイトルどおり簡単な質問なのですが、どうしても確認したいのでお願いします。 とあるメソッドで、2次元配列の中にいくつか大文字のOが入ってるのですが、与えられた配列にOがあればtrueを返し、なければfalseを返します。 public boolean cellAt(int row, int col){ if(space[row][col].equals("O")) return true; else return false; } rowとcolはテストメソッドから値を受け取ります。 これでプログラム自体は動くのですが、WebCatという自動的に採点するものがあるのですが、それによるとエラーがでてしまいます・・・。 どこが違うのかは教えてくれないのですが・・・。 上で間違っているとすれば、文字列の比較くらいしかないんじゃないかと思うのですが、 space[row][col].equals("O") これで比較できますよね? 他のを調べて、if (Arrays.equals(space[row][col], "O"))これを試してもみたのですが、赤線が出てしまって無理でした。 どなたか宜しくお願いします。

  • 文字列クラスを作りたいと思っています

    文字列クラスを作りたいと思っています。 以下のようなところまでは作れましたが、 エラーがでてしまいます。 どこかおかしいところがあるのでしょうか? *********************************************** #include<stdio.h> #include<string.h> class stt { public: char *str; int len; bool maked; stt::stt() { len=0; str=NULL; maked=false; } stt::~stt() { delete[] str; } stt &operator =(char *c) { if(maked) { delete[] str; maked=false; } len=strlen(c); str=new char[len]; strcpy(str,c); maked=true; return (*this); } virtual operator char*() { return str; } }; int main() { stt s; s="Hello World"; printf(s); getchar(); return 0; } ***********************************************

  • 配列と空欄の比較

     失礼いたします。 String str[][] = {{""},{""}}; なのですが、このstr[][]が空だということを判定する方法を教えてください。 普通にif({{""},{""}}.equals(str)) とするとエラーが出ます。 また、 if("".equals(str[0][0]) && ("".equals(str[1][0])) とはしたくないです。 1、配列要素全てが""である 2、配列要素のひとつ(str[1]等)が全て""である str={{"word",""},{"",""}}のようなとき ことを検証するにはどうすればよいでしょうか?

    • ベストアンサー
    • Java
  • 文字列クラスを作りたいと思っています。-2

    文字列クラスを作りたいと思っています。 以下のようなところまでは作れましたが、 エラーがでてしまいます。 どこかおかしいところがあるのでしょうか? ********************************************** #include<stdio.h> #include<string.h> #include<conio.h> class stt { public: char *str; int len; bool maked; stt::stt() { len=0; str=NULL; maked=false; } stt::~stt() { delete[] str; } stt &operator =(char *c) { if(maked) { delete[] str; maked=false; } len=strlen(c); str=new char[len+1]; strcpy(str,c); maked=true; return (*this); } stt &operator =(stt &ste) { if(maked) { delete[] str; maked=false; } len=strlen(ste.str); str=new char[len+1]; strcpy(str,ste.str); maked=true; return (*this); } stt operator +(stt ste) { static stt tet; int len1=strlen(str); int len2=strlen(ste.str); tet.str=new char[len1+len2+2]; strcpy(tet.str,str); strcat(tet.str,ste.str); tet.str[len1+len2+1]='\0'; return tet; } virtual operator char*() { return str; } }; int main() { stt ss,ww,pp; pp="Hello"; ss="Nice to meet you.\n"; ww="I am studing Visual C++"; pp=ss+ww; printf(pp); getchar(); return 0; } **********************************************

  • Javaの文字列比較について

    学校のJavaの課題で分からない問題がありました。習い始めたばかりなので全然うまくいきません。問題は、下のようです。 「円周率(3.14159265358979323846) の小数点以下の数値を一個ずつ入力していき、間違えたところでそこまでの桁数を表示するプログラムを作成しなさい。最大で小数点第20桁までとする。」です。 一応自分なりに考えてみたソースコードがこれです。 <ソースコード> import java.io.*; class Kadai0303 { public static void main(String[] args) throws IOException { String[] pied = {"14159265358979323846"}; int i; BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); for(i=0;i<20;i++){ String str= br.readLine(); if(str.equals(pied)){ System.out.println(str[i]); } else{ break; } } System.out.println(i+1 + "桁まで正解"); } } おそらく文法も正しく書かれていないと思うので、馬鹿じゃないかと思うかもしれませんが、自分なりに考えてみたので、ぜひわかる方がいれば、間違っているところとどのように直したらいいかをサポートしてくださるとうれしいです。 P.S すいません。変なソースコードで。

    • ベストアンサー
    • Java
  • 文字列比較

    最長10文字の文字列を2件入力し、char型の配列にそれぞれ格納する。2つの文字列を比較し、文字列が同じだったら「equal」を表示し異なっていたら「Not equal」を表示するプログラムを作成せよという課題が出ました。 条件として、11文字以上の文字が入力されたら、先頭から10文字までを有効とし、11文字目以降を無視する。下記のプログラムで文字列1に11文字以上入力すると、うまく動きません。なぜ、うまくいかないかと、どうなおしたらよいかを教えてください。 #include<stdio.h> #include<string.h> #define max_length 10 void get_string (char *p_str, int size); int main() { char string1[max_length+2]; char string2[max_length+2]; printf("文字列1:"); get_string(string1,max_length+2); printf("文字列2:"); get_string(string2,max_length+2); if(!strncmp(string1,string2,max_length)) puts("equal"); else puts("Not equal"); } void get_string (char *p_str, int size) { fgets(p_str,size,stdin); }

専門家に質問してみよう