2011-07-19 33 views
0

私は、ユーザーからの入力として長いStringを必要とするJavaプログラムを作成しています。これらの文字列のほとんどは、インターネットからコピーして貼り付けたニュース記事です。私が抱えている問題は、ユーザーがテキストを入力すると、Scannerが処理に問題があるキャリッジリターンが含まれていることです。 ScannerクラスのnextLine()メソッドを使用していますが、問題は、キャリッジリターンが行末をマークし、スキャナからの読み取りを終了することです。私も次のコードを試してみましたが、無限ループが発生します。 UserInput2はスキャナです。スキャナーで文字列の一部としてキャリッジリターンを読み取る方法は?

while(userInput2.hasNextLine()) 
     toBeProcessed = toBeProcessed + userInput2.nextLine(); 

キャリッジリターンをどのようにスキップできますか?たぶん、スキャナでそれらを '+'などに変換してもらうと、このような問題はありません。

+0

無限ループとはどういう意味ですか?あなたはコマンドラインから入力していて、それは止まらないと言っていますか? –

+0

まあまあではありません。 whileループを使用すると、スキャナは入力テキストの終わりを認識しません。 – Kurtis

+0

入力の終わりを2回入力することができます。これは同じ問題が発生したときに役立ちました。 –

答えて

0

スキャナは使用しないでください。 InputStreamを直接使用し、バイトを文字列に変換します。

0

どのような方法を使用していても、何らかの入力終了が必要です。 Scannerのケースでは、useDelimiterを使用して、Scannerの区切り文字を任意の値に設定できます。

また、herehereをご覧ください。

1

まず、注意:Stringオブジェクトを連結する代わりに、StringBuilderクラスを調べる必要があります。

第2に、入力文字列にはないものにuseDelimiterを使用することができます。または、スキャナを使用するのではなくthis questionのInputStreamでApacheコモンズのIOUtilsを使用する方法が良いでしょう。文字エンコーディングを指定します。

String.replace()で「\ r」文字を削除できます。

0

Scannerが検索した行の終わりを判断するために、そこに改行があります。あなたがしなければならないすべてはあなたがそこにいた知って再度挿入することです:StringBuilderを使用する方法について

while(userInput2.hasNextLine()) 
    toBeProcessed = toBeProcessed + userInput2.nextLine() + "\n"; 

マーティンさんのコメントが正しいです。それはあなたのコードを次のように変更します:

while(userInput2.hasNextLine()) { 
    toBeProcessedSB = toBeProcessedSB.append(userInput2.nextLine()); 
    toBeProcessedSB = toBeProcessedSB.append("\n"); 
} 
toBeProcessed = toBeProcessedSB.toString(); 
関連する問題