我想反转整个String
。例如,“猫正在运行”应提供输出“猫正在运行”。
我已经尝试了很多,但是我做不到。它显示“ gninnur si taC”。请帮助我,应该将“ cat”作为单个字符,而不是将“ c”作为单个字符。
这里是代码:
public static void main(String[] args) {
String str = "Cat is running";
System.out.println("Before recursion: " + str);
System.out.println("After recursion: " + reverse(str));
}
public static String reverse(String str) {
if(str.isEmpty())
return str;
String s = "";
for(int i = 0; i < str.length(); i++) {
s = s + str.charAt(i);
}
return reverse(s.substring(1)) + s.charAt(0);
}
您必须在String
中找到第一个单词,将String
的其余部分传递给递归调用,并在最后添加第一个单词:
public static String reverse(String str) {
if(str.isEmpty() || !str.contains(" "))
return str;
int sep = str.indexOf(' ');
return reverse(str.substring(sep+1)) + " " + str.substring(0,sep);
}
输出:
Before recursion: Cat is running
After recursion: running is Cat
BTW,循环是您的原始代码是没有意义的。您可以直接使用str
而不是创建它的副本。
您可以使用以下方法使其更短:
public static String reverse(String str) {
int sep = str.indexOf(' ');
return sep >= 0 ? reverse(str.substring(sep+1)) + " " + str.substring(0,sep) : str;
}
我想我做的要比@Eran好一点,但我已经写过:
private static String reverse(String str) {
if (str.isEmpty() || !str.contains(" "))
return str;
StringBuilder sb = new StringBuilder(" ");
int i = 0;
while (i < str.length() && str.charAt(i) != ' ') {
sb.append(str.charAt(i));
i++;
}
return reverse(str.substring(i + 1)) + sb.toString();
}
这里是另一个选项(未试用):
public static String reverse(String str) {
String words[] = str.split (" ");
StringBuilder sb = new StringBuilder();
j = words.length - 1;
while (j >= 0) {
sb.append(" " + words[j--]);
}
return sb.toString();
}
您也可以这样反转孔段公开课测试{
public static void main(String[] args) {
String s = "java is programming language";
System.out.println("before"+s);
System.out.println("after"+reverse(s));
}
public static String reverse(String str) {
if(!str.isEmpty()) {
StringBuffer s1 = new StringBuffer();
String [] words = str.toString().split(" ");
for(int i=words.length-1;i>=0;i--) {
if(i != 0) {
s1.append(words[i]+" ");
}else {
s1.append(words[i]);
}
}
return s1.toString();
}
return str;
}
}