Java 反转字符串的字符
我正试图把字串中的字颠倒过来。考虑一个字符串“我的名字是ABC”。预期输出应为“cba si eman yM”。但我得到的输出是“cba si emanyM”。最后一个空格字符有问题。有人能帮我吗 我试图把绳子从末端倒转过来 这是密码Java 反转字符串的字符,java,arrays,string,Java,Arrays,String,我正试图把字串中的字颠倒过来。考虑一个字符串“我的名字是ABC”。预期输出应为“cba si eman yM”。但我得到的输出是“cba si emanyM”。最后一个空格字符有问题。有人能帮我吗 我试图把绳子从末端倒转过来 这是密码 void reverse(String str) { int i = str.length() - 1; char[] arr = str.toCharArray(); for(int j = arr.length - 1; j >
void reverse(String str)
{
int i = str.length() - 1;
char[] arr = str.toCharArray();
for(int j = arr.length - 1; j > 0; j--){
if(arr[j] == ' '){
swap(arr,i, j);
i = j - 1;
}
}
System.out.println( new String(arr).toString());
}
void swap(char[] s,int start, int end){
while(start > end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start --;
end++;
}
}
public static void main(String args[])
{
String str = "My name is abc";
ReversWords r = new ReversWords();
r.reverse(str);
}
正如我在评论中所指出的,您想要的示例输出: cba si eman yM 建议您不想反转每个单词,只需反转整个字符串即可 但是,假设这是错误的,正如标题所述,您希望反转每个单词中的字母,保持单词的原始顺序,因此您希望的输出是: yM埃曼斯cba 当我运行代码时,得到的输出是: 迈曼国际职业篮球协会 主要的问题是,只有在单词前面加空格时,才可以反转单词。这个测试第一个字就失败了。在
reverse
中,退出循环后,在打印结果之前,需要从0切换到i
您还有一个问题,空格在交换单词的末尾,这就是为什么“我的”和“名字”之间的空格似乎消失了。换言之,如果您在每个空格处打印“u”,则当前代码的输出为:
迈曼·斯尤cba_
要解决这个问题,在调用swap
时不要包含空格。reverse
方法应如下所示:
void reverse(String str) {
int i = str.length() - 1;
char[] arr = str.toCharArray();
for(int j = arr.length - 2; j > 0; j--){
if(arr[j] == ' '){
swap(arr,i, j + 1);
i = j - 1;
}
}
swap(arr, i, 0);
System.out.println( new String(arr).toString());
}
输出:
yM埃曼斯cba
正如我在评论中所指出的,您想要的示例输出: cba si eman yM 建议您不想反转每个单词,只需反转整个字符串即可 但是,假设这是错误的,正如标题所述,您希望反转每个单词中的字母,保持单词的原始顺序,因此您希望的输出是: yM埃曼斯cba 当我运行代码时,得到的输出是: 迈曼国际职业篮球协会 主要的问题是,只有在单词前面加空格时,才可以反转单词。这个测试第一个字就失败了。在
reverse
中,退出循环后,在打印结果之前,需要从0切换到i
您还有一个问题,空格在交换单词的末尾,这就是为什么“我的”和“名字”之间的空格似乎消失了。换言之,如果您在每个空格处打印“u”,则当前代码的输出为:
迈曼·斯尤cba_
要解决这个问题,在调用swap
时不要包含空格。reverse
方法应如下所示:
void reverse(String str) {
int i = str.length() - 1;
char[] arr = str.toCharArray();
for(int j = arr.length - 2; j > 0; j--){
if(arr[j] == ' '){
swap(arr,i, j + 1);
i = j - 1;
}
}
swap(arr, i, 0);
System.out.println( new String(arr).toString());
}
输出:
yM埃曼斯cba
你本可以这么做的
String s = "My name is abc";
StringBuffer sb = new StringBuffer(s);
sb.reverse();
System.out.println(sb.toString());
输出:cba si eman yM您本可以这样做的
String s = "My name is abc";
StringBuffer sb = new StringBuffer(s);
sb.reverse();
System.out.println(sb.toString());
输出:cba si eman yM只需删除那些不需要的条件,并使其:
类表意符{
公共静态void main(字符串[]args){
String str=“我的名字是abc”;
System.out.println(str);//我叫abc
字符串rev=“”;
对于(int i=str.length()-1;0只需删除那些不需要的条件并使其:
类表意符{
公共静态void main(字符串[]args){
String str=“我的名字是abc”;
System.out.println(str);//我叫abc
字符串rev=“”;
对于(int i=str.length()-1;0应该while(start>end){
bewhile(start
也许?有什么理由不只是使用堆栈吗?System.out.println(new StringBuilder(str.reverse());
这些词似乎让人分心。你想要什么(从你发布的示例中)就是反转字符串中的所有字母。为什么不简单地这样做并避免任何将空格视为特殊的逻辑呢?除非你期望的结果是abc is name My
,否则这篇文章的标题应该是“反转字符串中的字符”。应该while(start>end){
bewhile(start
也许吧?有什么理由不使用堆栈吗?System.out.println(新的StringBuilder(str.reverse());
这些词似乎会分散注意力。你想要什么(来自你发布的示例)就是反转字符串中的所有字母。为什么不简单地这样做并避免任何将空格视为特殊的逻辑呢?除非你期望的结果是abc is name My
,否则这篇文章的标题应该是“反转字符串中的字符”。很可能,这是家庭作业。还有这样的“迂回”那就没用了。哈哈,他们需要在课堂上得到一些惩罚,先用一个函数而不是算法,他们不会再发布这样的问题。很可能,这是作业。还有这样的“迂回”那就没用了。哈哈,他们需要在课堂上得到一些惩罚,先用一个函数代替算法,他们不会再发布这样的问题了。