• ベストアンサー

String型とchar型の変換エラーです

今晩は!またまたこの掲示板にきました。よろしくお願いします。 文字列かブランクを取り出すコードを書きましたが、 -------- char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { --------- のところでString型とchar型の混合は受け入れられませんのようなエラーが出ました。 if(ch_check ==" "をboolean型でうけるのも拒否されました。 どこをどのようにしてやればよいでしょうか。 JAVA初心者です、特に文字列の取り扱いは評判通りわかり難くくないています。 よろしくお願いします。 ---------- public class Mojiretu_Blank { public static void main(String[] args) { String str = "This is a pen."; int i = 1 ; int blank_count = 0 ; while( i < (str.length()+1) ) { char ch_check = str.charAt(i+1) ; if(ch_check ==" ") { blank_count ++ ; System.out.println(ch_check); } else{} System.out.print("ブランクの数は" + blank_count + "個です。"); } } }

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

  • ベストアンサー
  • luckymako
  • ベストアンサー率55% (29/52)
回答No.5

開発環境が一緒ならば、おそらく自宅と会社のコードが違うのだと思います。 これまでの他の方々の回答でStringとCharの問題は間違いなく解決していると思いますので、質問にあったコードで気になった点を挙げます。 * 質問にあるコードでは無限ループになってしまいます。while の条件判断で使われるiがカウントアップされていません。 * マジックナンバーが多数あり、それらはその場しのぎで付けられています。またほとんどを取り除けます。 以下に直したコードを挙げます。 プログラムは書いて直して何ぼです。また、人の書いたプログラムを読むのも大切です。 Javaの勉強頑張って下さい。 public static void main(String[] args) { String str = "This is a pen."; int i = 0 ; int blank_count = 0 ; while(i < str.length()) { char ch_check = str.charAt(i++); if(ch_check == ' ') { blank_count++ ; System.out.println(ch_check); } else{} } System.out.print("ブランクの数は" + blank_count + "個です。"); }

htgo
質問者

お礼

luckymakoさん有難うございました、何とか解決いたしました。 色々と有難うございました。

その他の回答 (4)

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.4

No3です。 >会社のPCでは相変わらず、エラー表示になります。 家と会社で書いたコードは全く同じですか? また、エラーは以前のものと同じですか? 全く同じプログラムを書いて、エラーが出たり出なかったり、というのは本来ないはずです。 ※絶対ないわけではないですが、原因はJavaVMのバージョンや外部ファイルによるもので、 今回のコードを見てる限り、そのような感じはなさそうです。 >他にString型からChar型への変換方法はないのでしょうか。 StringクラスにはtoCharArray()メソッドがあり、char型の配列に変換することができます。 char型の配列にして、lengthを使うと配列長、つまりもとの文字数が確認できるので、 これで元の文字が何文字だったかを確認できます。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.3

>シングルクオォトでも「文字定数が無効です」とエラー表示になります。 シングルクォート内に2文字以上入っていないですか? Javaではシングルクォートで囲んだchar型文字(文字リテラル)は 1文字でないといけない決まりがあるようです。 'ab' //こういうのはダメ 'a' //1文字で指定する必要あり ※エスケープシーケンスなど例外もあります。 2文字以上指定していると、コメントにあったようなエラーが出るようです。 あと、おまけ。 質問にあったコードの場合、変数iがいつまでも1のままなので、 whileで無限ループになります。 forを使った方が書きやすいと思いますよ。

htgo
質問者

お礼

neko_nokoさん、有難う御座いました。 しかし、家のPC(Eclipse)では何とか動きましたが、会社のPCでは相変わらず、エラー表示になります。 これはどういう意味でしょうか、それほど微妙な使用方法(書き方)でしょうか。 他にString型からChar型への変換方法はないのでしょうか。 よろしくお願いします。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

ダブルクォート「""」で括るとString型とみなされます。 char型として扱うにはシングルクォート「''」で括って下さい。 if(ch_check == ' ')

htgo
質問者

お礼

皆さんに色々とレスをつけて頂いていますが シングルクオォトでも「文字定数が無効です」とエラー表示になります。 JAVAではシングルクォトはどのような場合に使うのでしょうか。 ____________________________ >if(ch_check == ' ')

  • houou0123
  • ベストアンサー率26% (4/15)
回答No.1

>if(ch_check ==" ") { この" "がStringなので' 'で出来るはず。

関連するQ&A