Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

空白のチェック

public boolean emptyChk(String str){
 boolean Flag=true;
 for(int j=0; j<str.length();j++){
  if(abc.charAt(j)==' ' || abc.charAt(j)==' '){
    Flag = false;
  }
 }
 return Flag;
}

上記のような半角と全角の空白があればエラーを返す
というメソッドを作成していますがこれではうまく動作しませんでした。

条件部分がいけないような気がしますがどう間違ってるのか分かりません。
分かる方いれば助けてください。

16

回答

6060

閲覧

16件の回答

評価

0

変数名は小文字にしましょう。
無意味なメソッド引数を使用しなくては
チェックしようと思ってるもの意外がチェックされます。

評価

0

判定がうまくいかない場合、その判定内容をデバッグ出力してみることです。

多分杏さんも同じことを言っていますが、変数をしっかりと見直してみましょう。
「こうなってるはず」という思いこみは捨てて。

評価

0

>public boolean emptyChk(String str){
>   :
>  if(abc.charAt(j)==' ' || abc.charAt(j)==' '){
>   :

クラス宣言時にString strなのに、
チェック部分で abc になっているのが問題かと思います。

あと、杏さん、mioさんの言われているように変数を大文字にするのはやめましょう

評価

0

Stringにはcontainsというメソッドがあるので、それを使ってはどうでしょうか?

また、例え小文字にしたとしても、flagという変数名はやめたほうがいいですね。何のフラグか分りませんし。
containsSpaceとかどうでしょう。

評価

0

回答ありがとうございます。

jdk1.4を利用しているのでcontainsは利用できませんでした。

引数とcharAt()のオブジェクトが違うことは分かりましたが、まだうまく動作しません。

やはりcharAt()が入ってるif文の条件をデバッグする必要があると思うのですが条件をデバッグする方法が分かりません。

アドバイスをお願いします。

評価

0

indexOfで見つけてみるというのはどうでしょうか?

デバッグはeclipseで行うと簡単だと思います

評価

0

if文の中を外に出す方法はどうでしょうか?
if (abc.charAt(j)==' ' || abc.charAt(j)==' ')
これを、
char ch = abc.charAt(j);
if (ch == ' ' || ch == ' ')
のようにするとか、
char ch = abc.charAt(j);
boolean isFullSpace = ch == ' ';
boolean isHalfSpace = ch == ' ';
boolean isSpace = isFullSpace || isHalfSpace;
if (isSpace)
とか。
こうしておいて、いろいろな場所にSystem.out.printlnで値を表示させてみるといいでしょう。

評価

0

これは覚えておいて損はないので。

System.out.println()で表示されるものを、実際に目で見てみるのです。

評価

0

教えていただいたデバッグのやり方で無事解決しました
System.out.println()でバグが分かりました。
無事に解決できた上に新たなデバック方法まで
教えていただき満足です。

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

評価

0

結局、どこが原因だったのでしょうか?
合わせて最終的なプログラムも載せていただけると嬉しいのですが。

評価

0

実はデバッグで分かったのですが
メソッド自体に問題はありませんでした。

問題はそのメソッドの使い方でした。
簡単に書けば
if(emptyChk()){
 String str="エラーメッセージ";
}
という感じでやってました。

本当なら
if(emptyChk()){

}else{
 String str="エラーメッセージ";
}
でした。if文の処理の間違いでした。。。
すいませんでした。でもデバッグの仕方を教えて
いただいたおかげで解決できたので感謝しています。

評価

0

なるほど、私もよくやりますw
その場合は、

if (!emptyChk(str))

のように書くこともできます。
また、メソッド名ですが、containsSpaceのほうがより処理内容を表していると思います。
あとはhasSpaceとかでしょうか?

評価

0

>if文の処理の間違いでした。。。
どちらにしても、ifですね。
条件分岐はプログラミングの基礎の部分ですが、不具合の温床となる可能性の高い部分でもあります。
今回のような単純な場合はさておき、オブジェクト指向においては、クラスの継承を用いて条件分岐を少なくするというのも、ひとつの設計のポイントになります。

>containsSpace
Spaceという単語はちょっと意味が広くなってしまうので、Blankのほうが良いかも知れません。

評価

0

>Blank
Blankのほうが意味が広くないですか?
Commons LangのStringUtilsでは、
isBlank・・・Checks if a String is whitespace, empty ("") or null.
isWhiteSpace・・・Checks if the String contains only whitespace.
となっており、Blankを使うならWhiteSpaceのほうがいいのかな、と思います。
ということで、containsWhiteSpace or hasWhiteSpaceあたりでしょうか。
spaceを単数形か複数形のどちらのほうがよりよいか、という問題もありますね。
あぁ、ネーミングは難しい・・・

評価

0

失礼、誤解を招いたようです。
「Space」だと、例えば「宇宙」という意味にも取られかねない、ということです。
「WhiteSpace」ならその心配はないでしょう。

評価

0

脱線ですみません。
話が面白い方向に行っていたので。

昔、名前カナという変数名を
nameKAN
と付けて、
結局、漢字だったかカナだったか判らなくなったことがあります。(T_T)

> あぁ、ネーミングは難しい・・・
激しく同意・・・。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。