Как распечатать реверс Строки java is object orientated language
не используя предопределенной функции как reverse()
?
Вы можете делать это либо рекурсивно, либо итеративно (зацикливание).
Итеративно:
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));
}
Прежде всего: зачем изобретать велосипед?
При этом: петля по длине строки до 0 и объединить в другую строку.
Это простейшее решение:
System.out.print("egaugnal detatneiro tcejbo si avaj");
Вот рекурсивное решение, которое просто печатает строку в обратном порядке. Это должно быть образовательным, если вы пытаетесь изучить рекурсию. Я также сделал это «неправильным», фактически имея 2 print
операторов; один из них следует закомментировать. Попробуйте мысленно прикинуть какой, или просто проведите эксперименты. В любом случае, извлеките уроки из этого.
static void printReverse(String s) {
if (!s.isEmpty()) {
System.out.print(s.substring(0, 1));
printReverse(s.substring(1));
System.out.print(s.substring(0, 1));
}
}
Бонусные баллы, если вы ответите на эти вопросы:
Ну, печать себя предполагает предопределенную функцию...
Предположительно, однако, можно получить символы и конкатенировать их вручную в обратном порядке (т.е. выполнить обратный цикл). Конечно, можно сказать, что concatenation - это предопределенная функция... так что, возможно, сам массив char. Но опять же... почему?
Разрешено ли в исходнике содержать "egaugnal detatneiro tcejbo si avaj" ;-p
Также - обратите внимание, что инверсия строк на самом деле довольно сложна, если учитывать объединение символов Юникода, суррогатные пары и т.д. Следует отметить, что большинство механизмов обратного преобразования строк работают только с наиболее распространенными случаями, но могут испытывать трудности с i18n.
Как насчет простого перехода от конца строки к начало:
void printRev(String str) {
for(int i=str.length()-1;i>=0;i--)
System.out.print(str.charAt(i));
}
final String s = "123456789";
final char[] word = s.toCharArray();
final int l = s.length() - 2;
final int ll = s.length() - 1;
for (int i = 0; i < l; i++) {
char x = word[i];
word[i] = word[ll - i];
word[ll - i] = x;
}
System.out.println(s);
System.out.println(new String(word));
Вы можете делать это либо рекурсивно, либо итеративно (зацикливаясь).
Iteratively:
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();
}
Recursively:
static String reverseMe(String s) {
if (s.length() == 0)
return "";
return s.charAt(s.length() - 1) + reverseMe(s.substring(1));
}
Integer i = new Integer(15);
test(i);
System.out.println(i);
test(i);
System.out.println(i);
public static void test (Integer i) {
i = (Integer)i + 10;
}