我正在尝试执行一个简单的逆向任务,例如:将字符串“how are you”更改为“you are how”。
这是我的代码:
public class Program {
public static String revSentence (String str) {
String [] givenString = str.split(" ");
String [] retString = new String[givenString.length];
int last = givenString.length - 1;
for (int i = 0; i < givenString.length; i++) {
retString [i] = givenString[last--];
}
return retString.toString();
}
public static void main(String[] args) {
String m = "how are you";
System.out.println(revSentence(m));
}
}
我得到了一个奇怪的输出:
[Ljava.lang.String;@e76cbf7
最佳答案
输出一点也不“奇怪”——它是对象的内部字符串表示,由 Object.toString()
创建。 String[]
不会覆盖它。如果你想输出所有的整体,遍历它们并连接它们,最好使用 StringBuilder
来避免创建不必要的 String
实例。
public static String arrayToString (String[] array) {
StringBuilder result = new StringBuilder();
for (String value : array) {
result.append(value);
}
return StringBuilder.toString();
}
如果您本身不需要该方法并希望将其包含在反转句子的整个过程中,这就是它的外观。它只迭代一次,向后迭代(=倒计时)以反转句子。
public static String revSentence (String str) {
String [] givenString = str.split(" ");
StringBuilder result = new StringBuilder();
// no need for 'last', we can use i to count down as well...
for (int i = givenString.length - 1 ; i >= 0; i--) {
result.append(givenString[i]);
}
return result.toString();
}
[编辑]:由于 OPs 对其他答案之一的评论,关于尚未学会如何使用 StringBUilder
,这里是一个 arrayToStirng 方法,但不使用一个。 但是请注意,这不应该正常进行,因为它会创建无用的 String
实例,由于 String< 的不可变特性,这些实例不会被 GC 清除
(保留所有实例以供重用)。
public static String arrayToString (String[] array) {
String result = "";
for (String value : array) {
result += value;
}
return result;
}
或者,没有专门的 arrayToString 方法:
public static String revSentence (String str) {
String [] givenString = str.split(" ");
String result = "";
for (int i = givenString.length-1 ; i >= 0 ; i--) {
result += givenString[i];
}
return result;
}
关于java - 尝试在 Java 中反转字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589139/