繁体   English   中英

Java反向字符串方法

[英]Java reverse string method

我想学习Java。 我需要制作一个称为reverse的方法,该方法获取一个字符串并返回一个字符串(但顺序相反)。 这是我尝试过的。 您能修复代码并解释我做错了什么吗? 还请给我一些有关Java入门的建议。 谢谢!

public class Test{
    public static String reverse(String a){  
        int j = a.length();
        char[] newWord = new char[j];
        for(int i=0;i<a.length();i++)
        {
            newWord[j] = a.charAt(i);
            j--;
        }
        return new String(newWord);
    }

    public static void main(String a[]){

        String word = "abcdefgh";
        System.out.println(reverse(word));
    }
}

您可以使用它来反转字符串,而无需使用自己的方法

new StringBuilder(word).reverse().toString()

如果要使用解决方案,则必须将int j = a.length()更改为int j = a.length()-1;

固定代码是

public class Test {
    public static String reverse(String a) {
        int j = a.length();
        char[] newWord = new char[j];
        for (int i = 0; i < a.length(); i++) {
            newWord[--j] = a.charAt(i);
        }
        return new String(newWord);
    }

    public static void main(String a[]) {

        String word = "abcdefgh";
        System.out.println(reverse(word));
    }
}

就像其他人提到的那样,数组索引从0开始。因此,例如,如果数组的大小为5,则其索引为0、1、2、3、4。 它没有索引5。

对于长度为5的字符串的示例,我所做的代码更改为newWord[--j] = a.charAt(i); 将按该顺序分配给索引4,3,2,1,0。

关于Java的良好开端,我认为您可以尝试https://softwareengineering.stackexchange.com/ 该网站不适合这种事情。

对于新的Java开发人员来说,这是一个常见的困难。

您缺少的一点是, 数组的最后一个条目位于a.length-1位置 对于Strings

这是一个改进的版本来演示。

public static String reverse(String a) {
    char[] newWord = new char[a.length()];
    for (int i = 0, j = a.length() - 1; i < a.length(); i++, j--) {
        newWord[j] = a.charAt(i);
    }
    return new String(newWord);
}

您的方法已经在正确的轨道上。 我要对您说的一件事是,您不需要使用字符数组,而是使用诸如return new String(newWord);类的东西return new String(newWord); 在我看来,这对于初学者Java来说过于复杂。

取而代之的是,您可以创建一个空字符串,并在循环查找要反转的字符串中的所有字符时,将字符附加在其上。

所以,你for循环,因为你倒车的话,应该在单词的末尾开始被逆转( a在这种情况下)和向后工作,以索引位置0(即这个词开始被逆转)。

尝试一下,看看这是否对您有意义:

public static String reverse(String a) {
    String reversedWord = "";
    for (int index = a.length() - 1; index >= 0; index --) {
        reversedWord += a.charAt(index);
    }
    return reversedWord;  
}

这一点,那么,在开始的最后a ,在时间(因此使用的工作向后一个字符index --直到我们到达一个点, index已经索引位置为0(中间状态超出了字符index >= 0 )。

在每个索引位置,我们只是从拍摄的字符a字符串并将其附加到reversedWord字符串。

希望这可以帮助! 如果您坚持下去,请随时提出任何其他问题。

在您的for循环中,主体必须为newWord[--j] = a.charAt(i); 这是因为如果数组的长度为8,则其索引为0-7。 因此,我们首先递减j ,然后将其用作数组指针。

  public class Test {
        public static String reverse(String a) {
            int size= a.length();//size of string
            char[] newWord = new char[size];//intialize  
            for (int i = size-1,j=0; i >=0 ; i--,j++) {//loop start from 7 to 0
                newWord[j] = a.charAt(i);// and reverse string goes from 0 to 7
            }
            return new String(newWord);
        }

        public static void main(String a[]) {

            String word = "abcdefgh";
            System.out.println(reverse(word));
        }
    }
static void reverse {
    String word = "Hello World";
    StringBuilder str = new StringBuilder(word);
    str.reverse();
    System.out.println(str);
}

或者你可以做

new StringBuilder(word).reverse().toString()
public static void main(String[] args) {

    String input = "hello world";
    String output = new String();

    for (int i = input.length() - 1; i >= 0; i--) {
        output = output + input.charAt(i);
    }

    System.out.println(output);

}
package Reverse;
import java.util.*;

public class StringReverse {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.print("Enter a String:  ");
        String original = input.nextLine();

        String rev = "";// Initialize as Empty String
        for(int i = original.length() - 1 ; i>=0 ; i--){
            rev += original.charAt(i);
        }
        System.out.println("Reverse form: "+rev);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM