14

誰かが与えられた文を逆にするJavaプログラムを書く方法を教えてもらえますか?

たとえば、入力が次の場合:

「これは面接の質問です」

出力は次のとおりである必要があります。

「質問インタビューはこれです」

4

14 に答える 14

24

文字列をスペースで分割してから、逆方向に繰り返して、逆の文を組み立てます。

String[] words =  "This is interview question".split(" ");

String rev = "";
for(int i = words.length - 1; i >= 0 ; i--)
{
   rev += words[i] + " ";
}

// rev = "question interview is This "

// can also use StringBuilder:
StringBuilder revb = new StringBuilder();
for(int i = words.length - 1; i >= 0 ; i--)
{
   revb.append(words[i]);
   revb.append(" ");
}
// revb.toString() = "question interview is This "
于 2010-04-26T13:15:18.630 に答える
23
String[] words = sentence.split(" ");
String[] reversedWords = ArrayUtils.reverse(words);
String reversedSentence = StringUtils.join(reversedWords, " ");

(commons-langを使用ArrayUtilsStringUtilsますが、これらは簡単に記述できる方法です-ほんの数ループ)

于 2010-04-26T13:17:07.060 に答える
21

ただ違う:再帰的な解決策。余分なスペースは追加されません。

public static String reverse(String s) {
   int k = s.indexOf(" ");
   return k == -1 ? s : reverse(s.substring(k + 1)) + " " + s.substring(0, k);
}


System.out.println("[" + reverse("This is interview question") + "]");
// prints "[question interview is This]"

splitまた、代わりに使用することでソリューションを改善し\bます(それは非常に明白です!)。

    String[] parts = "Word boundary is better than space".split("\\b");
    StringBuilder sb = new StringBuilder();
    for (int i = parts.length; i --> 0 ;) {
        sb.append(parts[i]);
    }
    System.out.println("[" + sb.toString() + "]");
    // prints "[space than better is boundary Word]"
于 2010-04-26T13:51:23.260 に答える
6

スペース文字で文字列配列に分割してから、逆の順序で配列をループし、出力文字列を作成します。

String input = "This is interview question";
String output = "";
String[] array = input.split(" ");
for(int i = array.length-1; i >= 0; i--)
{
    output += array[i];
    if (i != 0) { output += " "; }
}
于 2010-04-26T13:16:26.093 に答える
6

Bozho はすでに Java 固有の優れた回答を提供していますが、Java API メソッドを使用せずにこの問題を解決する必要がある場合は、次のようにします。

逆に、個々の単語を に単純にポップし、stack単語が残っていないときにすべての単語を元に戻すことができます。

(さらに明確にするために、Java はStackclassを提供するため、Java でもこのメソッドを使用できます)。

于 2010-04-26T13:22:18.073 に答える
3

また、試してみます。スタックとスキャナーを使用したバージョンは次のとおりです。

String input = "this is interview question";
Scanner sc = new Scanner(input);
Stack<String> stack = new Stack<String>();

while(sc.hasNext()) {
    stack.push(sc.next());
}

StringBuilder output = new StringBuilder();

for(;;) { // forever
    output.append(stack.pop());

    if(stack.isEmpty()) {
        break; // end loop
    } else {
        output.append(" ");
    }
}
于 2010-04-26T14:20:47.917 に答える
3

退屈なJavaのすべてのビット:

List<String> l = new ArrayList<String>(Arrays.asList("this is an interview question".split("\\s")));
Collections.reverse(l);
StringBuffer b = new StringBuffer();
for( String s : l ){
    b.append(s).append(' ');
}
b.toString().trim();

groovy では、もう少し読みやすくなります。

"this is an interview question"
    .split("\\s")
    .reverse()
    .join(' ')
于 2010-04-26T13:22:22.243 に答える
2
public class ReverseString {

    public void reverse(String[] source) {

        String dest = "";
        for (int n = source.length - 1; n >= 0; n--) {
            dest += source[n] + " ";
        }
        System.out.println(dest);

    }

    public static void main(String args[]) {
        ReverseString rs = new ReverseString();
        String[] str = "What is going on".split(" ");
        rs.reverse(str);

    }

}
于 2010-04-28T05:14:17.833 に答える
1

より良いアプローチはおそらく..どこかでロジックを見ていました..これがその仕事をするかもしれない私のコードです。

    public class revWords {

    public static void main(String[] args) {

        revWords obj = new revWords();
        String print = obj.reverseWords("I am God");
        System.out.println(print);

    }

    public String reverseWords(String words)
    {
      if(words == null || words.isEmpty() || !words.contains(" "))
        return words;

      String reversed = "";
      for( String word : words.split(" "))
        reversed = word + " " + reversed;

      return reversed;
    }

}
于 2010-12-01T04:35:54.010 に答える
1

以下の解決策を試してください。これは私にとってはうまくいきます。

public class reverseline {

public static void main(String[] args) {
    // TODO Auto-generated method stub

        String str="This is interview question";
    String words[]=str.split(" ");
    for(int i=words.length-1;i>=0;i--){
        System.out.print(words[i]+" ");
    }
}

}
于 2016-08-10T12:20:51.297 に答える
1

バニラの Java 8 ベースのソリューションについてはまだ誰も言及していません。これはBozho のものと同じですが、サードパーティのライブラリはありません。だからここにあります:

String input = "This is interview question";

List<String> list = Arrays.asList(input.split(" "));
Collections.reverse(list);
System.out.println(list.stream().collect(Collectors.joining(" ")));
于 2015-09-20T08:45:25.107 に答える
1

ライブラリを使用する必要はないと思います.. 1)文字列全体を逆にします 2)各単語を逆にします。

public static void revWord(char[] a) {

    // reverse whole
    revWord(a, 0, a.length);

    int st = -1;
    int end = -1;

    for (int i = 0; i < a.length; i++) {

        if (st == -1 && a[i] != ' ') {
            st = i;
        }
        if (end == -1 && a[i] == ' ' ) {
            end = i;
        }
        if(i == a.length-1){
            end=i+1;
        }

        if (st != -1 && end != -1) {
            revWord(a, st, end );

            st = -1;
            end = -1;
        }

    }

}

public static void revWord(char[] a, int s, int l) {
    int mid = (l - s) / 2;
    l--;

    for (int i = 0; i < mid; i++, l--) {
        char t = a[s+i];
        a[s+i] = a[l];
        a[l] = t;
    }
}

`

于 2013-04-09T03:17:48.933 に答える
0

StringTokenizerがレガシーと宣言される前は、多くの人がこれに StringTokenizer を使用しいました。ここに置いておこうと思いました。

String sentence = "This is interview question";
String reversed = "";
StringTokenizer tokens = new StringTokenizer(sentence); 

while (tokens.hasMoreTokens()) { // Loop through each token
    reversed =  tokens.nextToken() + ' ' + reversed; //add to start
}

System.out.println(reversed.trim());
于 2016-01-21T04:29:12.803 に答える