我正在尝试做一个简单的反向任务,例如:将字符串“你好吗”改为“你就是这样”。
这是我的代码:
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
答案 0 :(得分:4)
输出根本不是“怪异” - 它是由Object.toString()
创建的Object的内部字符串表示。 String[]
不会覆盖它。如果要输出所有entires,循环遍历它们并将它们连接起来,最好使用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();
}
[编辑]:由于OP对其中一个答案的评论,关于尚未学习如何使用StringBUilder
,这里是一个不使用一个的arrayToStirng方法。 请注意,这不应该正常进行,因为它会创建无用的String
实例,因为String
({1}}的所有实例都不会被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;
}
答案 1 :(得分:2)
这是一个解决方案:
public class Program {
public static String revSentence (String str) {
String retString = "";
String [] givenString = str.split(" ");
for (int i=givenString.length-1; i>=0; i--) {
retString += givenString[i] + " ";
}
return retString;
}
public static void main(String[] args) {
String m = "how are you";
System.out.print(revSentence(m));
}
}
修改它使“revSentence”函数返回一个String,加上改进了一下代码。享受!
答案 2 :(得分:1)
在数组对象上调用toString()
(在您的情况下为retString
)不会打印所有数组条目,而是打印对象地址。
您应该通过迭代来打印数组条目。
答案 3 :(得分:1)
将此代码用于反向字符串
StringBuilder builder = new StringBuilder();
for(String s : retString) {
builder.append(s);
}
return builder.toString();
答案 4 :(得分:0)
在数组上调用toString会为你提供内存参考,这对你来说并不是很有用。试试这个:
public static String revSentence (String str) {
String[] givenString = str.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = givenString.length - 1; i >= 0; i--) {
sb.append(givenString[i]);
if (i != 0)
sb.append(" ");
}
return sb.toString();
}
答案 5 :(得分:0)
for
循环从较长的长度开始到较低的builder.append(givenString[i] + " ");
这将连接字符串并返回整个句子你是你可以同时使用mySentence += givenString[i] + " ";
或builder.append(givenString[i] + " ");
但最好的方法是使用StringBuilder
课程(请参阅docs)
public class Program {
public static String revSentence(String str) {
String[] givenString = str.split(" ");
String[] retString = new String[givenString.length];
int last = givenString.length - 1;
//String mySentence = "";
StringBuilder builder = new StringBuilder();
for (int i = givenString.length - 1; i >= 0; i--) {
// retString [i] = givenString[i];
// mySentence += givenString[i] + " ";
builder.append(givenString[i] + " ");
}
return builder.toString(); // retuning String
//return mySentence;
}
public static void main(String[] args) {
String m = "how are you";
System.out.println(revSentence(m));
}
}
答案 6 :(得分:-1)
更快,更短: 要翻转单词,请使用:
public String reverseWord(String s) {
StringBuilder y = new StringBuilder(s);
return y.reverse();
}
现在拆分并使用此方法并使用Stringbuidler.append来连接所有。 并且不要忘记中间的空间。