みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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 + "個です。");
}
}
}

投稿日時 - 2007-05-29 19:04:46

QNo.3040669

すぐに回答ほしいです

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

開発環境が一緒ならば、おそらく自宅と会社のコードが違うのだと思います。
これまでの他の方々の回答で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 + "個です。");
}

投稿日時 - 2007-06-07 17:45:07

お礼

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

投稿日時 - 2007-06-08 00:45:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

No3です。

>会社のPCでは相変わらず、エラー表示になります。

家と会社で書いたコードは全く同じですか?
また、エラーは以前のものと同じですか?
全く同じプログラムを書いて、エラーが出たり出なかったり、というのは本来ないはずです。
※絶対ないわけではないですが、原因はJavaVMのバージョンや外部ファイルによるもので、
今回のコードを見てる限り、そのような感じはなさそうです。


>他にString型からChar型への変換方法はないのでしょうか。

StringクラスにはtoCharArray()メソッドがあり、char型の配列に変換することができます。
char型の配列にして、lengthを使うと配列長、つまりもとの文字数が確認できるので、
これで元の文字が何文字だったかを確認できます。

投稿日時 - 2007-06-02 20:56:16

ANo.3

>シングルクオォトでも「文字定数が無効です」とエラー表示になります。

シングルクォート内に2文字以上入っていないですか?
Javaではシングルクォートで囲んだchar型文字(文字リテラル)は
1文字でないといけない決まりがあるようです。
'ab' //こういうのはダメ
'a' //1文字で指定する必要あり
※エスケープシーケンスなど例外もあります。
2文字以上指定していると、コメントにあったようなエラーが出るようです。

あと、おまけ。
質問にあったコードの場合、変数iがいつまでも1のままなので、
whileで無限ループになります。
forを使った方が書きやすいと思いますよ。

投稿日時 - 2007-05-29 22:36:28

お礼

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

投稿日時 - 2007-06-01 17:58:28

ANo.2

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

if(ch_check == ' ')

投稿日時 - 2007-05-29 20:51:34

お礼

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

投稿日時 - 2007-05-29 22:05:32

ANo.1

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

投稿日時 - 2007-05-29 19:59:10