Обратная строка в Java - PullRequest
       80

Обратная строка в Java

422 голосов
/ 27 сентября 2011

У меня "Hello World" хранится в строковой переменной с именем hi.

Мне нужно распечатать, но в обратном порядке.

Как я могу это сделать?Я понимаю, что в Java уже встроена какая-то функция, которая делает это.

Related: Обратное преобразование каждого отдельного слова строки «Hello World» с помощью Java

Ответы [ 37 ]

908 голосов
/ 27 сентября 2011

Вы можете использовать это:

new StringBuilder(hi).reverse().toString()

Или для версий более ранних, чем JDK 1.5, используйте java.util.StringBuffer вместо StringBuilder - они имеют одинаковый API. Спасибо комментаторам за то, что они указали, что StringBuilder предпочтительнее в настоящее время, когда нет проблем с параллелизмом.

104 голосов
/ 06 сентября 2014

Для проблем с онлайн-судьями , которые не позволяют StringBuilder или StringBuffer, вы можете сделать это вместо , используя char[] следующим образом:

public static String reverse(String input){
    char[] in = input.toCharArray();
    int begin=0;
    int end=in.length-1;
    char temp;
    while(end>begin){
        temp = in[begin];
        in[begin]=in[end];
        in[end] = temp;
        end--;
        begin++;
    }
    return new String(in);
}
61 голосов
/ 27 сентября 2011
public static String reverseIt(String source) {
    int i, len = source.length();
    StringBuilder dest = new StringBuilder(len);

    for (i = (len - 1); i >= 0; i--){
        dest.append(source.charAt(i));
    }

    return dest.toString();
}

http://www.java2s.com/Code/Java/Language-Basics/ReverseStringTest.htm

58 голосов
/ 27 сентября 2011
String string="whatever";
String reverse = new StringBuffer(string).reverse().toString();
System.out.println(reverse);
26 голосов
/ 24 января 2015

Я делаю это, используя следующие два способа:

Обратная строка по CHARACTERS:

public static void main(String[] args) {
    // Using traditional approach
    String result="";
    for(int i=string.length()-1; i>=0; i--) {
        result = result + string.charAt(i);
    }
    System.out.println(result);

    // Using StringBuffer class
    StringBuffer buffer = new StringBuffer(string);
    System.out.println(buffer.reverse());    
}

Обратная строка по словам:

public static void reverseStringByWords(String string) {
    StringBuilder stringBuilder = new StringBuilder();
    String[] words = string.split(" ");

    for (int j = words.length-1; j >= 0; j--) {
        stringBuilder.append(words[j]).append(' ');
    }
    System.out.println("Reverse words: " + stringBuilder);
}
19 голосов
/ 27 сентября 2011

Взгляните на API Java 6 в StringBuffer

String s = "sample";
String result = new StringBuffer(s).reverse().toString();
17 голосов
/ 03 ноября 2014

Вот пример использования рекурсии:

public void reverseString() {
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String reverseAlphabet = reverse(alphabet, alphabet.length()-1);
}

String reverse(String stringToReverse, int index){
    if(index == 0){
        return stringToReverse.charAt(0) + "";
    }

    char letter = stringToReverse.charAt(index);
    return letter + reverse(stringToReverse, index-1);
}
12 голосов
/ 27 октября 2015

Вот решение низкого уровня:

import java.util.Scanner;

public class class1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String inpStr = in.nextLine();
        System.out.println("Original String :" + inpStr);
        char temp;
        char[] arr = inpStr.toCharArray();
        int len = arr.length;
        for(int i=0; i<(inpStr.length())/2; i++,len--){
            temp = arr[i];
            arr[i] = arr[len-1];
            arr[len-1] = temp;
        }

        System.out.println("Reverse String :" + String.valueOf(arr));
    }
}
11 голосов
/ 20 июля 2016

Поскольку приведенный ниже метод (с использованием XOR ) для обращения строки не указан, я прилагаю этот метод для обращения строки.

Алгоритм основан на:

1. (A XOR B) XOR B = A

2. (A XOR B) XOR A = B

Фрагмент кода:

public class ReverseUsingXOR {
    public static void main(String[] args) {
        String str = "prateek";
        reverseUsingXOR(str.toCharArray());
    }   

    /*Example:
     * str= prateek;
     * str[low]=p;
     * str[high]=k;
     * str[low]=p^k;
     * str[high]=(p^k)^k =p;
     * str[low]=(p^k)^p=k;
     * 
     * */
    public static void reverseUsingXOR(char[] str) {
        int low = 0;
        int high = str.length - 1;

        while (low < high) {
            str[low] = (char) (str[low] ^ str[high]);
            str[high] = (char) (str[low] ^ str[high]);   
            str[low] = (char) (str[low] ^ str[high]);
            low++;
            high--;
        }

        //display reversed string
        for (int i = 0; i < str.length; i++) {
            System.out.print(str[i]);
        }
    }

}

Выход:

keetarp

10 голосов
/ 01 ноября 2015

Я пытался, просто для удовольствия, используя стек.Вот мой код:

public String reverseString(String s) {
    Stack<Character> stack = new Stack<Character>();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        stack.push(s.charAt(i));
    }
    while (!stack.empty()) {
        sb.append(stack.pop());
    }
    return sb.toString();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...