2011-10-24 16 views
1

これが私たちのコードです。それらを逆の順序で印刷したい。だから1つの行は:はい、4チョコレートミルクです。我々は印刷したい:ミルクチョコレート4はい。Javaの文字列の反転言葉は

私たちのコードは単語を逆順に出力するので、yesはseyになります。私たちはそれがこのようなものであることを望んでいませんが、それをどのように変更するかはわかりません。私たちはスタックの作成を考えてきましたが、PatternとMatcherのものと一緒に動作する方法はありません。

+0

ですか?もしそうなら、そのようにタグを付けてください。 –

+0

私はSplit( "")ですべての単語を解析します。それらをハッシュマップに入れて逆にします。私は、それがテキストを逆にする最も速い方法だと思う。 – Racooon

+2

あなたのサンプル出力が "チョコレートミルク4はい"で、 "ミルクチョコレート4はい"ではないのはなぜですか?それは慎重ですか?はいの場合、アルゴリズムはそれをどのように認識すべきですか? – amit

答えて

4

あなたは読んだ行を逆にしてはいけませんが、その行をコレクションに分割して逆にするべきではありません。 この得るので、何をして、文字を反転さ:

Yes, 4 Chocolate milk -> klim etalocohC 4 , seY 

あなたは["Yes","4","Chocolate milk"]に行を分割する場合は、その配列/リストを逆にすることができます。

問題は次のとおりです。Chocolate milkの順番にしておきたいので、どの単語が一緒に属しているかを定義する必要があります。あなたの入力が常に<words>, <number> <words>の場合は、最初に<words>を区切るために,に分割し、残りの最初の空白を区切って番号と2番目の<words>を分割することができます。

更新はこれを試してみてください。

String input = "Yes sir, 4 Chocolate milk"; 

//Pattern is: 
//- one or more words separated by whitespace as group 1: ((?:\\w+\\s*)+) 
//- a comma 
//- optional whitespace: \\s* 
//- an integer number as group 2: (\\d+) 
//- optional whitespace \\s* 
//- an arbitrary rest (which might contain anything) as group 3: (.*) 
Pattern p = Pattern.compile("((?:\\w+\\s*)+),\\s*(\\d+)\\s*(.*)"); 
Matcher m = p.matcher(input); 

List<String> list = new ArrayList<String>(); 
while(m.find()) { 
    list.add(m.group(1)); 
    list.add(m.group(2)); 
    list.add(m.group(3)); 
} 

Collections.reverse(list); 
for(String s : list) { 
    System.out.println(s); 
} 

出力は、これはあなたの入力のレイアウトに依存し、ちょうど開始を提供することを意図していることを

Chocolate milk 
4 
Yes sir 

注意する必要があります。また、他のパターンマッチングロジックと統合する必要があります。

1

Scannerまたは単にString.split()を使用して、ライン内にすべてのトークンのArrayまたはCollectionを作成してみてください。次に、for -loopを使用してそれを逆方向に繰り返して、行を再作成します。これを達成するためにCollections.reverse()を使用することもできます。

0

文字列を単語で分割し、結果を文字列の配列に保存し、最後の要素から最後の要素までの文字列を表示します。 コード:

public static void main(String[] args) { 
    String hello = "bananas 45 guns me likes 3"; 
    String[] reverse_me = hello.split(" "); 

    // the -1 is because the index starts in zero :-0) 
    for(int i = reverse_me.length-1; i >= 0 ; i--){ 
     System.out.println(reverse_me[i]); 
    } 

} 

出力:この宿題は

3 
likes 
me 
guns 
45 
bananas