我试图逐字逐句地反转字符串中的单词。但我遇到了一些麻烦。我知道很多人使用StringBuilder
来解决这个问题,但我想在没有它的情况下尝试一下。
输入:
Hi there
输出:
iH ereht
目前,我的输入字符串在最后一个字处停止。我假设这是因为在我的代码中,代码的反向部分仅在检测到' '
或空格时才会反转。我通过在到达字符串末尾时执行反向部分来改变这一点。 (i == len
)然而,这似乎无法解决问题。我假设我的if
,else if
语句和for loop
内部存在一些逻辑错误。我想知道是否有人能引导我朝着正确的方向前进。
我一直在研究的测试用例字符串是
"Hi there Mr.Doge!"
我现在得到的输出是
iH ereht
< - 字符串末尾的空格。
随着代码的进行,我打印了一些文字,最后一个单词(Mr.Doge!
)被存储到temp
,但它没有被反转。
这是编译代码时的输出:
0
H
1
Hi
2
i
iH
3
t
4
th
5
the
6
ther
7
there
8
iH e
iH er
iH ere
iH ereh
iH ereht
9
M
10
Mr
11
Mr.
12
Mr.D
13
Mr.Do
14
Mr.Dog
15
Mr.Doge
16
Mr.Doge!
iH ereht
我的代码:
public static String reverseWord(String str){
int len = str.length();
String reverse = "", temp = "";
for (int i = 0; i < len; i++) {
System.out.println(i);
if (str.charAt(i) != ' '){
temp += str.charAt(i);
System.out.println(temp);
}
else if (str.charAt(i) == ' ' || i == len){
//if (str.charAt(i) == ' ') {
for (int j = temp.length() - 1; j >= 0; j--) { // reverse
reverse += temp.charAt(j); // append in reverse
System.out.println(reverse);
}
reverse += ' ';
temp = "";
}
}
return reverse;
}
答案 0 :(得分:3)
通过一些修改,这必须有效。请参阅代码中的注释,以查看我修改的内容。
<强>代码:强>
public static void main(String[] args)
{
System.out.println(reverseWord("Hello world Liondancer"));
}
public static String reverseWord(String str)
{
int len = str.length();
String reverse = "", temp = "";
for (int i = 0; i < len; i++) { // i == len comparison is unuseful since 'i' won't never be 'len'
if (str.charAt(i) != ' ') {
temp = str.charAt(i) + temp; // What you did, but add the current character first, THIS IS THE REVERSE!!!
} else if (str.charAt(i) == ' ') {
reverse += temp + " ";
temp = "";
}
}
reverse += temp; // Added this outside the loop to add last word stored in 'temp'
return reverse;
}
<强>输出:强>
olleH dlrow recnadnoiL
注意:强>
我删除了嵌套的for
,因为没有必要。
答案 1 :(得分:1)
尝试此更改
for (char c : str.toCharArray()) {
if (c != ' '){
temp = c + temp;
} else {
reverse += temp + ' ';
temp = "";
}
}
reverse += temp;
答案 2 :(得分:0)
在你的循环外反转并检查你是不是在最后一个字(如此) -
public static String reverseWord(String str) {
int len = str.length();
String reverse = "", temp = " ";
for (int i = 0; i < len; i++) {
if (str.charAt(i) != ' ') {
temp += str.charAt(i);
} else if (str.charAt(i) == ' ' || i == len) {
if (i + 1 < len) {
for (int j = temp.length() - 1; j >= 0; j--) { // reverse
reverse += temp.charAt(j); // append in reverse
}
temp = " ";
} else {
temp = "";
}
}
}
for (int j = temp.length() - 1; j >= 0; j--) { // reverse
reverse += temp.charAt(j); // append in reverse
}
return reverse;
}
答案 3 :(得分:0)
如果我这样做,我会将整个字符串存储在一个arraylist中。 然后说:
for(i=0;i<len;i++)
temp.size()=len;
temp(length-i)=str(i);
print temp;
答案 4 :(得分:0)
你也可以这样使用循环......
public String reverseString(String str){
String reverse="";
for(int i=str.length()-1; i>=0; i--){
reverse = reverse + str.charAt(i);
}
return reverse;
}