Java:回文判定するYO [勉強]
REDSTONEで、しゃくれテイマがモリネルタワー4FでサキュバスZinテイムしたり60分後の沸き待ちしたり、そんなことをしている間に、Javaの課題をひとつ やっつけました。
「与えられた文字列が回文(前から読んでも、後ろから読んでも同じ文)になっているか判定するプログラムを書け」
・・・これ、訓練中からずっと壁にぶち当たっていた課題でしたが、サキュバスZinテイムの間に解けました。
いつひらめくか、分からないモノですねぇ。
以下、入力された文字列が回文かどうか判定するソースです。
import java.io.*;
public class Kaibun {
public static void main(String[] args) {
BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));
System.out.print("文字列を入力してください。 :");
try {
String line = kbd.readLine();
String hanten = reverse(line);
if (line.equals(hanten)) {
System.out.println("入力された文字列:"+ line);
System.out.println("反転させた文字列:"+ hanten);
System.out.println("回文です。");
} else{
System.out.println("入力された文字列:"+ line);
System.out.println("反転させた文字列:"+ hanten);
System.out.println("回文ではありません。");
}
} catch (IOException e) {
System.out.println(e);
}
}
public static String reverse(String s) {
int nagasa = s.length();
char[] moji = s.toCharArray();
char c;
for (int i=0; i<nagasa/2; i++) {
c = moji[i];
moji[i] = moji[nagasa-1-i];
moji[nagasa-1-i] = c;
}
String ss = "";
for (int i=0; i<nagasa; i++) {
ss = ss + moji[i];
}
System.out.println();
return ss;
}
}
これ、無駄な部分があったりするかもしれないけど、とりあえず入力された文字列が回文かどうかの判定ができるようになりました。
18行目の
if (line.equals(hanten)) {
ここが、前までは
if (line == hanten) {
だったんです。
教科書の7章「while文とString型」をチラチラ見ていたら、「文字列であり参照型であるString型変数は==で内容が等しいかどうか調べられない」、「文字列が等しいかどうか調べる場合には.equals()を使う」と書いてあったんですね。
これで、入力された文字列と、入力された文字列を反転した文字列とを比較して、回文か否かを判定できるようになりました。
が・・・
このプログラム、入力された文字列内に" "(半角スペース)とか" "(全角スペース)があっても、1文字と認識してしまうため、たとえば"live devil"という英語の回文を入力しても、半角スペースを認識してしまい回文ではないと判定します。
う~ん・・・。
どうやって、入力された文字列から半角スペースとか全角スペースを除去するか。
そこがちょっとネックですね。
ま、とりあえずは、とまと とか、しんぶんし とか、たけやぶやけた とか、わたしまけましたわ とかは回文として認識してくれます。
あー・・・
なんか、スッキリしましたよ。なんとなくね。喉の奥に刺さっていた魚の小骨が取れた感じ??
しかし、今日(08/10)だけでも、どれだけブログ記事をUPしているんだか・・・。(^-^;
次は、もうちょっと内容をまとめて、UPしますね。
コメント 0