我的代码假设只使用循环,我想要使字符串反向并返回该反向值。我有一个问题返回反向值,我不知道如何做到这一点。
public static String reverseString(String str){
for(int i =str.length()-1;i>=0;i--)
return str.charAt(i);// This wont return the value, gives me a error
// any tips?
}
答案 0 :(得分:1)
更新回答:
public static String reverseString(String str){
char[] temp = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
temp[i] = str.charAt(str.length() - (i + 1));
}
return new String(temp);
}
祝你好运!
答案 1 :(得分:1)
假设您使用Java,您可以将代码更改为:
public static String reverseString(String str){
StringBuilder sb = new StringBuilder();
for(int i =str.length()-1;i>=0;i--){
sb.append(str.charAt(i));
}
return sb.toString();
}
更改是您创建StringBuilder对象。您发布的代码会尝试返回您从字符串中提取的第一个字符,这不是您想要的。您希望反向构建字符串,因此在每次迭代中,将下一个反向字符添加到StringBuilder中,当循环终止时,使用toString()返回StringBuild的字符串表示形式。
您可以更智能,更快地完成此实现,但我认为此任务是学习过程的一部分,因此更重要的是您了解为什么您的代码不应该在循环中放置return语句,当您真正想要循环迭代多次并在返回任何内容之前保存每个中间结果。
文档:
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
根据 ohiodoug 关于StringBuilder的评论,在没有StringBuilder类的情况下显示它是如何完成的:
import java.lang.StringBuilder;
public class Main
{
public static void main(String [ ] args){
String resultSimple = simpleReverseString("Hello World!");
String resultSB = betterReverseString("Hello World!");
System.out.println(resultSimple);
System.out.println(resultSB);
//Prints:
//!dlroW olleH
//!dlroW olleH
}
//Simple string concatenation.
//Uses the += operator.
//Since s is already a String we don't need to use
//toString() on it.
public static String simpleReverseString(String str){
String s = "";
for(int i =str.length()-1;i>=0;i--){
//s += str.charAt(i) is equal to
//s = s + str.charAt(i)
s += str.charAt(i);
}
return s;
}
//Same as simpleReverseString, but uses the StringBuilder class
public static String betterReverseString(String str){
StringBuilder sb = new StringBuilder();
for(int i =str.length()-1;i>=0;i--){
sb.append(str.charAt(i));
}
return sb.toString();
}
}