2017-10-26 4 views
0

文字列を入力として受け取り、Stacksを使用して入力内の各文の順序を逆にする別の文字列を返すメソッドを作成しようとしています。例えば、ユーザが「hi there。i like red。」と入力すると、出力される文字列は、 "私のように赤いところがあります"。私が作成した次のプログラムは、1つの文に対してうまく動作します。どのように私は期間を認識し、メソッドをもう一度開始するメソッドを変更することができますか?現在、「hi there」と入力すると、「there hi」という出力が得られます。しかし、 "hi there。i like red。"と入力すると、出力は "red。i there there。hi"になります。このreverseSentenceメソッドを変更して、ピリオドを認識し、次の文章をやり直すにはどうすればよいですか?アドバイスやヒントは非常に役立ちます。Stacksを使用したJavaの逆文

//Reverses the order of words inside of sentences. 

import java.util.*; 
import java.util.regex.*; 

public class reverse { 

    //reverses the string using a stack 
    private static String reverseSentence(String inputString) { 

    String[] arrString = inputString.trim().split(Pattern.quote(" ")); 
    Stack stack = new Stack(); 

    for(String word : arrString) 
    { 
     stack.push(word); 
    } 
    StringBuilder builder = new StringBuilder(); 
    while(!stack.isEmpty()) 
    { 
     builder.append(stack.pop()).append(" "); 
    } 
    return builder.toString(); 
    } 

    public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    Stack<String> stack = new Stack<String>(); 

    System.out.printf("Enter a sentence: "); 
    String sentence = scanner.nextLine(); 

    if (sentence == null || sentence.length() == 0) { 
     System.out.println("Invalid..."); 
     return; 
    } 

    String reverse = reverseSentence(sentence); 
    System.out.printf("Reversed string using stack is : %s", reverse); 


    while (!stack.isEmpty()) { 
     System.out.print(stack.pop() + " "); 
    } 
    } 
} 

答えて

0

スペースで入力を分割する前に、期間によってそれをトリミングし、以前得たすべての文/分割さパートのforループでは、あなたのメソッド内のロジックを実行します。あなたのメインの方法では

、代わりにreverseSentenceを呼び出す:

String[] sentences = sentence.trim().split(Pattern.quote(".")); 
for (String toReverse : sentences) { 
          System.out.print(reverseSentece(toReverse)); 
} 

私は、これは完璧ではないですけど、私は自分の携帯電話に入力していますので、私は、私が何を意味するかのアイデアを与えることを願っています。

0

文字列分割メソッドを使用します。 String[] sentences = sentence.split ("\\.");かもしれませんか?

0

は、これを達成するために私の心に来て二つのアプローチがあります:「」

  1. まず分割することにより、文字列、あなたの文字列内の文章のリストを与えます。あらゆる文章にあなたのロジックを適用してください。逆の文をすべてピリオドで区切って出力します。

  2. 現在のロジックを使用しますが、スタックにワードを追加する前に、ワードの最後の文字がピリオドであるかどうかを確認してください。そうであれば、これは文の終わりを意味します。空になるまでスタックをポップして内容を表示します。 (これは逆の文章をここに表示します)次の単語に進みます。

希望します。

関連する問題