![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
input.txtを読み込み、各行を単語単位で逆順にしてoutput.txtに出力するプログラムを考えています。
例えば、input.txtの内容が
Hello World.
I study java.
Please help me.
である場合、output.txtの内容は
.World Hello
.java study I
.me help Please
となります。
この問題に対し、私は http://shorttext.com/pg8p6enbnd にあるようなプログラムを考えました。
しかし、実際に実行してみると、上の例でいうなら
World. Hello
java. study I
World. Hello
me. help Please
java. study I
World. Hello
のように出力されてしまいます。
どこがおかしいのでしょうか?どなたか教えてください。
No.2ベストアンサー
- 回答日時:
問題点は2つ。
1番目は、No1さんの指摘の通り。tokenList がどんどん長くなっていくので、
A B C
D E
の入力だと1行目の処理では、tokenList=["A","B","C"]で、出力が "C B A"になりますが、2行目の処理では出力を"E D“にしたいのに、tokenList=["A","B","C","D","E"]になり、出力が"E D C B A"になってしまいます。行ごとにclearが必要。
2番目は、StringTokenizer は区切り文字を与えないと、空白文字で語を区切るので、ピリオドは語の一部になります。
変更を最小限にするとループの中はこんな感じで。
StringTokenizer st = new StringTokenizer(line," .",true);
tokenList.clear();
while (st.hasMoreTokens()) {
String token = st.nextToken();
tokenList.add(token);
}
String reverse = "";
for (int i = 0; i < tokenList.size(); i++) {
reverse = reverse + tokenList.get(tokenList.size()-i-1);
}
ご回答ありがとうございます!
StringTokenizerのコンストラクタの第2引数で区切り文字を決められるんですね。しかも複数与えられるようなので勉強になりました!
今回は2つの問題点に言及して下さり、具体的なプログラムを示してくださったnotnotさんにベストアンサーを贈らせていただきたいと思います。
No.1
- 回答日時:
tokenList の中身をクリアする処理がループの中で行われていません。
従って、前に逆転させた行がtokenList の中に残っていて、次の逆転させた文字列の表示処理で前のものが表示されてしまいます。while ((line = in.readLine()) != null) {
の直後に
tokenList.clear();
を挿入すればあなたが考えたとおりの動きになると思います。
ご回答ありがとうございます!
なるほど、確かにtokenListには単語が蓄積されていくばかりですね(^_^;)
tokenList.clear()便利ですね!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- Ruby プログラミング 3 2023/06/09 14:30
- Ruby ruby 1 2022/06/10 13:31
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- 英語 Should you need any help, please let me know. Shou 2 2023/02/04 19:31
- 英語 Should you need any help, please let me know. Shou 1 2023/02/03 20:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
system.out.printが出力されない
-
Log4jで機能毎に別ファイルへ出...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
Eclipseのコンソールを常に表示...
-
JavaScriptの変数をjavaのメソ...
-
1~100までの数字を表示し、か...
-
ArrayListによる計算表作成
-
半角カナが含まれる文字列をフ...
-
System.out.printlnの出力先
-
InputStreamはreadが1回しかで...
-
数字文字列をパック10進数に変...
-
VBSエラー"オブジェクト型の変...
-
Apache POI のログについて
-
java for文、if文を使っての三角形
-
java ファイル操作について
-
Tomcatが無応答となる現象が起...
-
JavaScriptでcgiの戻り値を受け...
-
Javaで任意のパスへ任意のファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
1~100までの数字を表示し、か...
-
Eclipseのコンソールを常に表示...
-
system.out.printが出力されない
-
JAVAのServletで、画像表示につ...
-
1~100までの数字を表示したい
-
テキストエリアで改行する
-
switch分が機能しません。
-
Tomcatが無応答となる現象が起...
-
一定のスペースを空けて端を揃...
-
数字文字列をパック10進数に変...
-
JavaScriptの変数をjavaのメソ...
-
バイトスワップ
-
Java 九九の表について
-
tomcatのstdout.logを停止したい。
-
ダブルクォーテーション(””)...
おすすめ情報