问题:输入一个字符串,输出它的倒序字符串,注意不能使用系统提供的API。如:
input: Hello
output: olleH
1.数组实现,代码如下:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(reverse(s));
}
public static String reverse(String s) {
if (s == null || s.length() == 1) {
return s;
}
char[] chars = s.toCharArray();
char temp;
int length = chars.length;
for (int i = 0; i < length / 2; i++) {
temp = chars[i];
chars[i] = chars[length - 1 - i];
chars[length - 1 - i] = temp;
}
return new String(chars);
}
2.递归实现,代码如下:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(reverse(s));
}
public static String reverse(String s) {
if (s == null || s.length() == 0) {
return s;
}
int length = s.length();
if (length == 1) {
return s;
} else {
return reverse(s.substring(1)) + s.charAt(0);
}
}
3.通过StringBuilder逆序遍历
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(reverse(s));
}
public static String reverse(String s) {
if (s == null || s.length() == 0) {
return s;
}
StringBuilder stringBuilder = new StringBuilder();
//从s.length()-1遍历到0
for (int i = s.length() - 1; i >= 0; i--) {
//把字符追加到stringBuilder中
stringBuilder.append(s.charAt(i));
}
return stringBuilder.toString();
}
4.直接倒序遍历。这个相比StringBuilder,因为在for循环里面,采用“+”连接字符串,每执行一次for循环,都会创建一个StringBuilder,所以效率相对慢一些。代码如下:
import java.util.Scanner;
public class Reverse {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(reverse(s));
}
public static String reverse(String s) {
String rs = "";
for (int i = s.length() - 1; i >= 0; i--) {
rs = rs + s.charAt(i);
}
return rs;
}
}