Java 反转字符串的字符

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 >

我正试图把字串中的字颠倒过来。考虑一个字符串“我的名字是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 > 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){
be
while(start
也许?有什么理由不只是使用堆栈吗?
System.out.println(new StringBuilder(str.reverse());
这些词似乎让人分心。你想要什么(从你发布的示例中)就是反转字符串中的所有字母。为什么不简单地这样做并避免任何将空格视为特殊的逻辑呢?除非你期望的结果是
abc is name My
,否则这篇文章的标题应该是“反转字符串中的字符”。应该
while(start>end){
be
while(start
也许吧?有什么理由不使用堆栈吗?
System.out.println(新的StringBuilder(str.reverse());
这些词似乎会分散注意力。你想要什么(来自你发布的示例)就是反转字符串中的所有字母。为什么不简单地这样做并避免任何将空格视为特殊的逻辑呢?除非你期望的结果是
abc is name My
,否则这篇文章的标题应该是“反转字符串中的字符”。很可能,这是家庭作业。还有这样的“迂回”那就没用了。哈哈,他们需要在课堂上得到一些惩罚,先用一个函数而不是算法,他们不会再发布这样的问题。很可能,这是作业。还有这样的“迂回”那就没用了。哈哈,他们需要在课堂上得到一些惩罚,先用一个函数代替算法,他们不会再发布这样的问题了。