アプリ版:「スタンプのみでお礼する」機能のリリースについて

import java.io.*;

class Sample3
{
public static void main(String[] args) throws IOException
{
System.out.println("文字列を入力してください。");

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();

System.out.println("検索文字を入力してください。");

String str2 = br.readLine();
char ch = str2.charAt(0);

int num = str1.indexOf(ch);

if(num != -1)
System.out.println(str1 + "の" + (num+1)
+ "番目に「" + ch + "」が見つかりました。");
else
System.out.println(str1 + "に「" + ch
+ "」はありません。");
}

char ch = str2.charAt(0);の部分ですが、
charAt(0)というのは ( )に書かれている番号「のみ」を参照するんですよね?
だからもし「こ」んちにはと入力しても0番目の「こ」しか出さないはずなのに、
「に」 を入れたらちゃんと「3番目に に が見つかりました」と出るのはなぜですか?

A 回答 (4件)

charAtメソッドは、indexOfで使用する検索した文字を明確にするための整形処理だったのだと考えられます。



String str2 = br.readLine();

この処理では、複数の文字列を格納することができ、

int num = str1.indexOf(str2);

とした場合、文字列「にちは」や、「ばんは」がかんがえられます。と一致した箇所を返す、というプログラムになります。
この実装例の場合、「こんにちは」と「にちは」を比較して、最初に出現した位置を返すようになります。

では、ご質問のプログラムの場合、何かしらの意図があって、最初に入力された文字のみを検索の対象としたかったのだろうと推察します。
この場合、charAt(0)によって、文字列から最初の文字だけを抜き出すことが必要になります。



回答はプログラムから読み解ける部分にとどめます。
    • good
    • 0
この回答へのお礼

何度も回答有難うございました。

お礼日時:2013/08/11 22:19

回答要旨 検索対象はcharAt(0)でもchでも、str2でもありません。

str1です。

詳細

str1:検索対象の文字列
str2:検索したい文字をキーボード型受け付けるための一時一時変数

ご質問にはstr2に「こ」「に」、str1に「こんにちは」と代入されているものとして回答します。

   String str2 = br.readLine();
    上記の処理はキーボードから入力を受け付ける処理と考えてください(例えば、です)
   char ch = str2.charAt(0);
    上記の処理は入力から最初の一文字だけを取り出します(後に何が入力しても無視します。改行文字も無視します)

次に、 int num = str1.indexOf(ch); を考えます。文字列str1に対してはじめに文字chが出てくるのは何番目か?を検索しています。文字と位置の関係は貴見の通り、以下の関係になります。「こ」は0、「に」は2です。

こんにちわ
0 1 2 3 4  

プログラムの出力においては+1するため、
こんにちはの1番目に「こ」が見つかりました。
こんにちはの3番目に「に」が見つかりました。
と出力されます。

indexOf()で、文字を探し出します。以下の関係であることは貴見の通りです。

この回答への補足

何度もすいません。
テキストの出力結果は

文字列を入力してください。
こんにちは
検索文字を入力してください。

こんにちはの3番目に「に」がみつかりました。

となっていて、
hirotn さんがおっしゃっている

>こんにちはの1番目に「こ」が見つかりました。
>と出力されます。

の部分はありません。そこで再度質問のスタートラインに戻りますがなぜあえて、

char ch = str2.charAt(0);
が必要なのか(なぜがcharAtで縛るのか)が解らないのです。

補足日時:2013/08/05 23:13
    • good
    • 0

str1が「こんにちは」だとします。



str2は、検索文字列を求めていますが、実際に検索に使用するのは、

char ch = str2.charAt(0);

となっていますので、

’に’と入力された場合、「3番目に に が見つかりました」となります。

この回答への補足

>実際に検索に使用するのは、
>char ch = str2.charAt(0);
>となっていますので、

検索に使用するのはindex文じゃないですか?
それとこれはNo.1の方にもお聞きしましたが、

でも(0)と指定しているので
0 1  2 3 4
こ ん に ち は
0番目は「こ」なんで、「こ」しか取り出せないのではないですか?

補足日時:2013/08/04 13:03
    • good
    • 0

「3番目に に が見つかりました」と出力されている部分は、どこでしょう?


そこで使われている変数はどんなものがあるでしょうか?
その変数の値は、どこで設定されているでしょうか?

str2.charAt(0); は、str2の0番目(=1文字目)の文字です。
では、str2は何が入っている変数でしょうか?


ゆっくりと、コンピュータになったつもりで、プログラムの処理を追ってください。

この回答への補足

>「3番目に に が見つかりました」と出力されている部分 >は、どこでしょう?

System.out.println(str1 + "の" + (num+1)
+ "番目に「" + ch + "」が見つかりました。");
の部分だけでしたね、すいません。追加質問ですが、
String str2 = br.readLine();
char ch = str2.charAt(0);
のコードの部分はお飾りですか?

補足日時:2013/08/04 12:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!