Печать обратной строки без использования какой-либо предопределенной функции? - PullRequest
6 голосов
/ 10 апреля 2010

Как напечатать обратную строку java is object orientated language без использования какой-либо предопределенной функции, например reverse()?

Ответы [ 34 ]

57 голосов
/ 10 апреля 2010

Это самое простое решение:

System.out.print("egaugnal detatneiro tcejbo si avaj");
48 голосов
/ 10 апреля 2010

Вы можете сделать это либо рекурсивно, либо итеративно (циклично).

Итеративно:

 static String reverseMe(String s) {
   StringBuilder sb = new StringBuilder();
   for(int i = s.length() - 1; i >= 0; --i)
     sb.append(s.charAt(i));
   return sb.toString();
 }

Рекурсивный:

 static String reverseMe(String s) {
   if(s.length() == 0)
     return "";
   return s.charAt(s.length() - 1) + reverseMe(s.substring(0,s.length()-1));
 }
8 голосов
/ 10 апреля 2010

Что ж, печать сама будет предлагать предопределенную функцию ...

Предположительно, однако, вы могли бы получить символы и объединить их вручную в обратном порядке (то есть перебрать их в обратном направлении). Конечно, вы могли бы сказать, что сцепление является предопределенной функцией ... так что, возможно, сам массив char. Но опять же ... почему ?

Разрешено ли источнику содержать "egaugnal detatneiro tcejbo si avaj"; -p

Кроме того - обратите внимание, что на самом деле обращение строк является довольно сложным, если учесть объединение символов в юникоде, суррогатных пар и т. Д. Следует иметь в виду, что большинство механизмов обращения строк будут иметь дело только с более распространенными случаями, но могут бороться с i18n.

7 голосов
/ 04 мая 2012
String reverse(String s) {
  int legnth = s.length();
  char[] arrayCh = s.toCharArray();
  for(int i=0; i< length/2; i++) {
      char ch = s.charAt(i);
      arrayCh[i] = arrayCh[legnth-1-i];
      arrayCh[legnth-1-i] = ch;
  } 
 return new String(arrayCh);
}
6 голосов
/ 10 апреля 2010

Как насчет простого хода от конца строки до начала:

void printRev(String str) {
 for(int i=str.length()-1;i>=0;i--)
  System.out.print(str.charAt(i));
}
3 голосов
/ 18 мая 2011
String a="Siva";

for(int i=0;i<=a.length()-1;i++){
    System.out.print(a.charAt(i));
}

for(int i = a.length() - 1; i >= 0; --i){
    System.out.println(a.charAt(i)); 
}
3 голосов
/ 15 февраля 2013
public class StringReverse {

    public static void main(String[] args) {
        String s= (args[0]);
        for (int i =s.length()-1; i >= 0; i--) {            
               System.out.print(s.charAt(i));    
        }
    } 
}

Печатает обратную строку ввода.

3 голосов
/ 10 апреля 2010

Прежде всего: зачем изобретать велосипед?

Это, как говорится: цикл от длины строки до 0 и объединение в другую строку.

1 голос
/ 16 августа 2013

Попробуйте это:

public  class Test {

    public static void main(String[] args) {
        String s = "welcome";   
    for( int i=0, j = (s.length())-1; i <= j; j-- ) {   
      char c=s.charAt(j);
      System.out.print(c);
    }
    }
}
1 голос
/ 16 августа 2013

Что удивительно, так это то, что большинство ответов неверны!Когда используется Юникод.Похоже, никто не понимает, что Java использует UTF-16 под капотом для кодирования текста.

Вот мой простой ответ.

...