2016-04-13 13 views
3

私はJava Stringsを初めて使用しています。 は、実際に私は言葉を逆にするコードがあります:上記のコードでは最初の単語の長さごとに文字列を逆転します

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Test2 { 

    public static void main(String[] args) throws IOException 
    { 
     System.out.println("enter a sentence"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String rev =br.readLine(); 

     String [] bread = rev.split(" "); 
     for(int z =bread.length-1;z>=0;z--) 
     { 
      System.out.println(bread[z]); 
     } 

    } 
} 

を私が取得:

入力:都市バンガロール

です:バンガロール市
出力でありますしかし、出力は以下のようにしたい:

入力:バンガロール市内
出力です:

入力:もう一つの例伝承

ngをcityaisba Java.Javaに挨拶Iamの新しいオブジェクト指向言語です。
アウトプット:長年のオリエンテーションを利用しています。 javaToNe wIamolleH

私はあなたのコードを実行すると、私は次のような結果を得る

+0

so:あなたの実際の質問は何ですか? – Stultuske

+0

しかし、私はこのような出力をしたい 例:バンガロールは都市です 出力:cityaisba ng a lore – Firoz

+1

私たちはあなたの宿題をしません。 – msparer

答えて

4

は、あなたがそれを行うことができ一つの方法である:

String rev = br.readLine(); 

    String [] bread = rev.split(" "); 
    int revCounter = 0; 
    for(int z = bread.length - 1; z >= 0; z--) 
    { 
     String word = bread[z]; 
     for(int i = 0; i < word.length(); i++) 
     { 
      // If char at current position in 'rev' was a space then 
      // just print space. Otherwise, print char from current word. 
      if(rev.charAt(revCounter) == ' ') 
      { 
       System.out.print(' '); 
       i--; 
      } 
      else 
       System.out.print(word.charAt(i)); 

      revCounter++; 
     } 
    } 
+0

これは、OPの後にあるように見えます。しかし、 'word.length'はコンパイルされません。 –

+0

@Neftasあなたは正しいです。私はこれを修正する答えを編集しました。 –

+0

あなたはそれを持っています... @ Marko Popovic – Firoz

0

を私を助けてください:なぜあなたがスペースを追加しない、だから、単一のラインでそれを持っている

city 
a 
is 
Bangalore 

を1行印刷しますか?ここで

System.out.println("enter a sentence"); 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String rev = br.readLine(); 

String[] bread = rev.split(" "); 
for (int z = bread.length - 1; z >= 0; z--) { 
    System.out.print(bread[z] + " "); 
} 
0

GHajbaが行ったように私はあなたのコードの妥当性をチェックしませんでした。しかし、スペースを特定の場所に残しておきたい場合は、すべてのスペースを削除して元のStringのインデックスに従って戻すこともできます。

をすべて削除

newBread = newBread.replace(" ", ""); 

が戻ってそれらを入れ

StringBuilder str = new StringBuilder(newBread); 

for (int index = oldBread.indexOf(" ") ; 
    index >= 0 ; 
    index = oldBread.indexOf(" ", index + 1)) 
{ 
    str.insert(index, ' '); 
} 

newBread = str.toString();

私はこれを素早く思いついたし、これを行うためのより良い方法があるかもしれません。おそらくStringBuilderを使用しないかもしれませんが、これはより良い方法を見つけるまであなたを助けるかもしれません。これで

+0

何がoldbreadですか@Daemun – Firoz

+0

あなたが入力した元の文字列。それはあなたが言及した 'パン'に基づいた単なる総称です。 – Daemun

0

てみてください(私は、入力として文字列を使用しました):

String original = "Bangalore is a city"; 
    System.out.println("Original : "+original); 

    StringBuilder inverted = new StringBuilder(); 
    StringBuilder output = new StringBuilder(); 
    String temp = ""; 

    String[] split = original.split("\\s+"); 

    for (int i = split.length - 1; i >= 0; i--) { 
     inverted.append(split[i]); 
    } 

    temp = inverted.toString(); 

    for (String string : split) { 
     int currLenght = string.length(); 
     String substring = temp.substring(0,currLenght); 
     temp = temp.replaceAll(substring, ""); 
     output.append(substring).append(" "); 
    } 

    System.out.println("Converted : "+output.toString()); 
0

StringBufferにスペースなし逆に言葉を追加します。

StringBuffer b = new StringBuffer(); 
    for (int i = bread.length-1; i >= 0 ; i--) { 
     b.append(bread[i]); 
    } 

そしてStringBufferにオリジナルStringのスペースを挿入します。

int spaceIndex, prevIndex = 0;   
    while ((spaceIndex = rev.indexOf(" ", prevIndex + 1)) != -1) { 
     b.insert(spaceIndex, ' '); 
     prevIndex = spaceIndex; 
    } 
関連する問題