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

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

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

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

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

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

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

Ответы [ 37 ]

7 голосов
/ 05 сентября 2016

Как уже отмечали другие, предпочтительным способом является использование:

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

, но если вы хотите реализовать это самостоятельно, я боюсь, что остальные ответынедостатки.

Причина в том, что String представляет список Unicode точек, закодированных в массиве char[] в соответствии с кодировкой переменной длины: UTF-16 ,

Это означает, что некоторые кодовые точки используют один элемент массива (одну кодовую единицу), но другие используют два из них, поэтому могут быть пары символов, которые должны рассматриваться как одна единица (последовательный «высокий»)и "низкие" суррогаты)

public static String reverseString(String s) {
    char[] chars = new char[s.length()];
    boolean twoCharCodepoint = false;
    for (int i = 0; i < s.length(); i++) {
        chars[s.length() - 1 - i] = s.charAt(i);
        if (twoCharCodepoint) {
            swap(chars, s.length() - 1 - i, s.length() - i);
        }
        twoCharCodepoint = !Character.isBmpCodePoint(s.codePointAt(i));
    }
    return new String(chars);
}

private static void swap(char[] array, int i, int j) {
    char temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

public static void main(String[] args) throws Exception {
    FileOutputStream fos = new FileOutputStream("C:/temp/reverse-string.txt");
    StringBuilder sb = new StringBuilder("Linear B Syllable B008 A: ");
    sb.appendCodePoint(65536); //http://unicode-table.com/es/#10000
    sb.append(".");
    fos.write(sb.toString().getBytes("UTF-16"));
    fos.write("\n".getBytes("UTF-16"));
    fos.write(reverseString(sb.toString()).getBytes("UTF-16"));
}
4 голосов
/ 02 февраля 2015

Очень просто в минимальном коде строк

public class ReverseString {
    public static void main(String[] args) {
        String s1 = "neelendra";
        for(int i=s1.length()-1;i>=0;i--)
            {
                System.out.print(s1.charAt(i));
            }
    }
}
3 голосов
/ 26 февраля 2017

1.Использование массива символов:

public String reverseString(String inputString) {
    char[] inputStringArray = inputString.toCharArray();
    String reverseString = "";
    for (int i = inputStringArray.length - 1; i >= 0; i--) {
        reverseString += inputStringArray[i];
    }
    return reverseString;
}

2.Использование StringBuilder:

public String reverseString(String inputString) {
    StringBuilder stringBuilder = new StringBuilder(inputString);
    stringBuilder = stringBuilder.reverse();
    return stringBuilder.toString();
}

ИЛИ

return new StringBuilder(inputString).reverse().toString();
3 голосов
/ 02 октября 2014
System.out.print("Please enter your name: ");
String name = keyboard.nextLine();

String reverse = new StringBuffer(name).reverse().toString();
String rev = reverse.toLowerCase();
System.out.println(rev);

Я использовал этот метод для преобразования имен в обратный и нижний регистр.

3 голосов
/ 17 ноября 2016

Это помогло мне

public static void main(String[] args) {

    String text = "abcdefghijklmnopqrstuvwxyz";

    for (int i = (text.length() - 1); i >= 0; i--) {
        System.out.print(text.charAt(i));
    }
}
2 голосов
/ 07 декабря 2015

просто для удовольствия ..:)

Algorithm (str,len)
char reversedStr[] =new reversedStr[len]

Пройдите от 0 до len / 2, а затем

reversedStr[i]=str[len-1-i]  
reversedStr[len-1=i]=str[i]
return reversedStr;

Сложность времени: O (n)

Космическая сложность: O (n)

public class Reverse {
    static char reversedStr[];

    public static void main(String[] args) {
        System.out.println(reversestr("jatin"));
    }


    private static String reversestr(String str) {
        int strlen = str.length();
        reversedStr = new char[strlen];

        for (int i = 0; i <= strlen / 2; i++) {
            reversedStr[i] = str.charAt(strlen - 1 - i);
            reversedStr[strlen - 1 - i] = str.charAt(i);

        }
        return new String(reversedStr);
    }

}
2 голосов
/ 28 марта 2017

Процедура:

Мы можем использовать split () для разделения строки. Затем используйте обратный цикл и добавляем символы.


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

class test
{
  public static void main(String args[]) 
  {
      String str = "world";
      String[] split= str.split("");

      String revers = "";
      for (int i = split.length-1; i>=0; i--)
      {
        revers += split[i];
      }
      System.out.printf("%s", revers);
   }  
}

 //output : dlrow

2 голосов
/ 14 февраля 2015
public class Test {

public static void main(String args[]) {
   StringBuffer buffer = new StringBuffer("Game Plan");
   buffer.reverse();
   System.out.println(buffer);
 }  
}
2 голосов
/ 07 января 2015

Один естественный способ обратить String - это использовать StringTokenizer и стек.Stack - это класс, который реализует простой в использовании стек объектов «последний пришел - первым вышел» (LIFO).

String s = "Hello My name is Sufiyan";

Поместите его в стек вперед

Stack<String> myStack = new Stack<>();
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
     myStack.push(st.nextToken());
}

Печатать стопку назад

System.out.print('"' + s + '"' + " backwards by word is:\n\t\"");
while (!myStack.empty()) {
  System.out.print(myStack.pop());
  System.out.print(' ');
}

System.out.println('"');
2 голосов
/ 23 марта 2016

Все вышеприведенное решение слишком хорошо, но здесь я делаю обратную строку, используя рекурсивное программирование.

Это полезно для тех, кто ищет рекурсивный способ сделать обратную строку.

public class ReversString {

public static void main(String args[]) {
    char s[] = "Dhiral Pandya".toCharArray();
    String r = new String(reverse(0, s));
    System.out.println(r);
}

public static char[] reverse(int i, char source[]) {

    if (source.length / 2 == i) {
        return source;
    }

    char t = source[i];
    source[i] = source[source.length - 1 - i];
    source[source.length - 1 - i] = t;

    i++;
    return reverse(i, source);

}

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