1

スキャナーから文字列を入力するプログラムを作ろうとしていますが、入力された文字列を分解して単語の順序を逆にしたいです。これは私がこれまでに持っているものです。

Scanner input = new Scanner(System.in);
System.out.println("Enter your string");
StringBuilder welcome = new StringBuilder(input.next());
int i;
for( i = 0; i < welcome.length(); i++ ){
    // Will recognize a space in words
    if(Character.isWhitespace(welcome.charAt(i))) {
        Character a = welcome.charAt(i);
    }   
}

私がやりたいのは、スペースを認識した後、その前のすべてをキャプチャし、すべてのスペースで文字列を再配置することです。

4

7 に答える 7

4

質問後に編集します。

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class Main {

   public static void main( String[] args ) {
      final String welcome = "How should we get words in string form a List?";
      final List< String > words = Arrays.asList( welcome.split( "\\s" ));
      Collections.reverse( words );
      final String rev = words.stream().collect( Collectors.joining( ", " ));
      System.out.println( "Your sentence, reversed: " + rev );
   }
}

実行:

Your sentence, reversed: List?, a, form, string, in, words, get, we, should, How
于 2013-04-09T19:19:26.020 に答える
3

最初に文字列全体を逆にすることをお勧めしました。次に、2 つのスペースの間で部分文字列を逆にします。

public class ReverseByWord {

    public static String reversePart (String in){
        // Reverses the complete string
        String reversed = "";
        for (int i=0; i<in.length(); i++){
            reversed=in.charAt(i)+reversed;
        }
        return reversed;
    }

    public static String reverseByWord (String in){
        // First reverses the complete string
        // "I am going there" becomes "ereht gniog ma I"
        // After that we just need to reverse each word.
        String reversed = reversePart(in);
        String word_reversal="";
        int last_space=-1;
        int j=0;
        while (j<in.length()){
            if (reversed.charAt(j)==' '){
                word_reversal=word_reversal+reversePart(reversed.substring(last_space+1, j));
                word_reversal=word_reversal+" ";
                last_space=j;
            }
            j++;
        }
        word_reversal=word_reversal+reversePart(reversed.substring(last_space+1, in.length()));
        return word_reversal;
    }

    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println(reverseByWord("I am going there"));
    }
}
于 2013-04-09T19:17:59.857 に答える
1

入力した文字列の単語を逆にする方法は次のとおりです。

Scanner input = new Scanner(System.in);
System.out.println("Enter your string");
String s = input.next();

if(!s.trim().contains(' ')) {
   return s;
}
else {

   StringBuilder reversedString = new StringBuilder();
   String[] sa = s.trim().split(' ');

   for(int i = sa.length() - 1; i >= 0: i - 1 ) {

      reversedString.append(sa[i]);
      reversedString.append(' ');
   }

   return reversedString.toString().trim();
}

お役に立てれば。

于 2013-04-09T19:28:08.350 に答える
1

コードの行数を減らしたい場合は、私のコードを調べることができると思います:

package com.sujit;

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

public class StatementReverse {
    public static void main(String[] args) throws IOException {
        String str;
        String arr[];
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a string:");
        str = br.readLine();
        arr = str.split("\\s+");

        for (int i = arr.length - 1;; i--) {
            if (i >= 0) {
                System.out.print(arr[i] + " ");
            } else {
                break;
            }

        }
    }
}
于 2017-08-18T09:45:10.400 に答える