
No.4ベストアンサー
- 回答日時:
> おっしゃるとおり'a'と言う書き方はできたのですが、
> ''(空)はできないのかな?? と疑問に思いまして・・・
なるほど。
結論から書きますと、(先ほども少し書きましたが)「空の文字」というのは存在しないんです。
このことについて、もう少し説明しますね。
「文字」そのものに関して説明する前に、「文字列」について少し説明したいと思います。
文字列というのは、「文字」がいくつか つながって出来たものなんです。例えば、
"ABDCE"
という文字列があったら、
'A' 'B' 'C' 'D' 'E'
という5個の文字がつながっていると考えてください。つまり、この文字列に関して言えば、
最初の文字は 'A'、次の文字は 'B'、その次は 'C'……
というようになります。
では、最後の 'E' の後はどうなっているのかというのが気になりますが、実はここには何も存在しないんです。つまり、「空の文字」が存在しているわけではなくて、「文字」そのものが存在していないんです。
だから、'E' の次にある文字を取り出したら「空の文字」になった、というようなことはありえないというわけなんです。
ただし、「空の文字列」や「空の文字列バッファ」はありえるのです。(ここが、ちょっとややこしい)
これは、文字列(バッファ)の中に文字が一つも存在していないと考えてください。
先ほどの "ABCDE" という文字列は、5個の文字からできていました。つまり、文字列という枠の中に5個の文字が存在していたわけです。
しかし、空の文字列には文字はありません。文字列という枠の中に文字が一つも入っていないということです。(ただし、文字列という枠そのものは存在しています)
空の文字列は、ダブルクォーテーションマークを二つ続けて "" というように書きます。ダブルクォーテーションマークという枠は存在していますが、その中には何もないわけです。
では、なぜ「空の文字」は存在しないのか。実は、「文字」は「文字列」とはまったく異なった性質を持っているのです。
一つ段ボール箱(=文字列)があったとします。箱の中には、いろんな色のボール(=文字)が入っています。
もし箱の中にボールが一つもなかったら、それは空の文字列です。箱の中にボールが3個入っていれば、それは長さが3の文字列です。
では、箱の中から一つボールを取り出して、そのボールの色を見て見ましょう。
「青」「赤」「緑」「黒」「白」などといろいろ考えられますが、ボールの色が文字の中身を表わしていると考えてください。ボールが赤色だったら、それは '赤' という文字です。
では、もし「空の文字」という文字があるならば、何色でしょうか? 「白」「黒」「無色透明」などが「空の文字」に相当するように思えるかもしれませんが、ちょっと待ってください。
'白'、'黒'、'無' という色が、確かに存在しています。ということは、これは「空の文字」ではありません。
そもそも、ボールという物体が存在していれば、そのボールには何かしら色があるわけで、ボールに色が「無い」ということはありえませんね。
同じように、文字が「空」になることも無いんです。
一つの文字が存在しているとき、その文字は何があろうと「一つの文字」なんです。
さて、
> length()以上の数をcharAtの引数に入れたら例外が出そうですね・・・
とおっしゃっているのは、まさにそのとおりなのです。
文字が存在しないことを知らせるために、例外をスローするわけです。(「空の文字」を返す、ということができないからですね)
もちろん、charAt を使う前に引数の値を length とチェックしておくという対策もOKですが、例外をキャッチするという手もあります。
例外を、引数が範囲外になったことの合図としてとらえるわけです。
(結構細かな話をしたので、今回はわかってもらえる自信なしです)
大変感謝します。
すごくわかりやすかったです。
文字列と文字との違い、ですね(*^_^*)
こういったことはなかなかうまく説明している本はなかったりするので大変ためになりました。
ありがとうございました_(._.)_
No.3
- 回答日時:
#1 です。
> 何がしたかったかと言うと、
> abcdefghijk~
> のような文字列があって
> その1文字ずつをしらべていって
よくわかんないけど、特定の文字もしくは
文字列が含まれているかどうか確認するなら
indexOf メソッドってのもありますんで、蛇足ですが。
No.2
- 回答日時:
まず、Javaにおいて「文字(char)」と「文字列(String)」と「文字列バッファ(StringBuffer)」はすべて異なるものとして扱われますので、注意してください。
例えば、「if(str.charAt != "")」のように書くと、「文字」と「文字列」を比較することになるので、エラーになります。
「文字」は、必ず一つのUnicode文字を表わします。
「文字」同士が同じかどうかを比較するには、==を使います。
「文字列」同士を比較するには、equals というメソッドを使います。== を使って比較することはできません。equals は文字列の「内容」が同じであるか比較するのに対し、== は二つの文字列変数に代入された「インスタンス」が同じであるかを比較するだけです。
「文字列バッファ」についても、比較の仕方は文字列と同じです。
さて、ご質問の件ですが、「空の文字(char)」というものは存在しません。char は、必ず一つのUnicode文字を表わします。
(ただし、「空白」などのUnicode文字を代入することはできます。)
代わりに、「0文字の文字列」とか「0文字の文字列バッファ」は存在します。
文字列や文字列バッファの文字数を調べるには、それらの length メソッドを使います。
なお、charAt メソッドは、文字列あるいは文字列バッファの何文字目かにある文字を取得するものです。
このメソッドでは、文字列(バッファ)の文字数を超える範囲の部分の文字を取得しようとすると、例外が発生します。例えば、文字数が3の文字列に対して charAt(10) を行うと、例外になります。
なお、文字列(バッファ)の文字数は、「長さ」とも呼ばれます。
String 型の変数 str に代入された文字列の長さが3以下であるか調べる例
if (str.length() <= 3) .....
String 型の変数 str に代入された文字列の前から3文字目が 'A' という文字であるか調べる例
if (str.charAt(2) == 'A') .......
二つ目の例でcharAtメソッドを用いていますが、前から3文字目の文字を取り出すのに2という引数を指定している点に注意してください。「前から何文字目」を表わす数字は、このように一つずれるようになっています。
もちろん、この例では、文字列の長さが3文字以上であることが前提です。文字列の長さが3未満である場合、つまり、文字列に3文字目が存在しない場合、例外がスローされます。
これまで私が書いてきたことは、とても重要なことです。過去にも他の方が似たような質問をしているので、過去の投稿履歴を検索してみるのも良いでしょう。
何か分からないことがあったら、おっくうがらずに補足して下さい。
この回答への補足
いろいろありがとうございます。
おっしゃるとおり'a'と言う書き方はできたのですが、
''(空)はできないのかな??
と疑問に思いまして・・・
まだまだ勉強不足ですね・・・
No.1
- 回答日時:
>charが空であることを調べるのにはどうすればいいですか?
空って空白(space)ではないの?
Stringbufferのlengthメソッドで
文字数取得するのでは、ダメなんでしょうか。
この回答への補足
実はlength()で代用しました。
何がしたかったかと言うと、
abcdefghijk~
のような文字列があって
その1文字ずつをしらべていって
その文字が””(空)であれば処理終わり、
としようと思ったのですが・・・
よく考えたら、length()以上の数をcharAtの引数に入れたら例外が出そうですね・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Ecel 2003 VBA 画像 挿入
-
javaの数値リテラルや文字リテ...
-
LU分解
-
プログラミングの質問です
-
数値にウエイトをかけたい
-
access での BETWEEN
-
strutsを使って値をやり取りす...
-
テキストボックスに入力された...
-
0x0F>>2は何故答えが3になる?
-
変数のビット列
-
txtから読み込んだ計算式の結果...
-
javaで\\という文字列の記述方法
-
<html:text> disabled = 'true'...
-
文字列で読み込んだ計算式で値...
-
【JavaScript】指定箇所に文字...
-
パラメータを利用するには…
-
pasteHTMLでパスが勝手に変換さ...
-
動的配列が存在(要素が有る)か...
-
ファイル書き込みに関して
-
2次元の配列となっているクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
Stringクラスの変数の格納アド...
-
javaのCSVデータ読込についてです
-
PSQLExceptionが発生する
-
excel vba 時間計算と条件分岐...
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
C言語の変数(LSB)の合わせ込...
-
DOSバッチで変数の値を変数名に...
-
JSPでの計算結果表示
-
DateTimePickerに値を入れたい...
-
JSPでHashMap・配列の変数の値...
-
StringBufferクラスについて
-
char型での演算子
-
結合した文字列をファイル名に...
-
String str = "a\\\\b\\\\c";
-
Evaluate()に文字列の形式の数...
-
getParameterの値変更
-
matchesを否定文として使う方法...
おすすめ情報