使用charAt()按字典顺序比较两个字符串,而不使用compareTo()方法

时间:2013-12-02 12:50:43

标签: java

如果第一个字符串按字典顺序大于第二个字符串则返回1,如果相等则返回0,否则返回-1。对于某些情况,它返回1,-1,0正确,但对于此str1和str2返回正好与预期产出相反。

public class StringCompare {

    static String testcase1 = "helloworld";
    static String testcase2 = "hellojavaworld";

    public static void main(String args[]) {
        StringCompare testInstance = new StringCompare();
        int result = testInstance.newCompare(testcase1, testcase2);
        System.out.println("Result : " + result);
    }

    // write your code here
    public int newCompare(String str1, String str2) {

        int l1 = str1.length();
        int l2 = str2.length();
        int max = 0;
        if (l1 <= l2) {
            max = l1;
        }
        else
            max = l2;
        int count = 0;

        for (int i = 0; i < max; i++) {
            char ch1 = str1.charAt(i);
            char ch2 = str2.charAt(i);

            if (str2.charAt(i) > str1.charAt(i)) {
                return - 1;
            }

            if (str1.charAt(i) > str2.charAt(i)) {
                return 1;

            }
            if (l1 == l2) {
                if (ch1 == ch2) {
                    count++;
                }
                if (count == max) {
                    return 0;
                }
            }

        }
        if (l1 == l2) return 0;
        if (l1 > l2)
            return 1;
        else
            return - 1;

    }

}

3 个答案:

答案 0 :(得分:1)

这是一个简化的答案

public class TestStrings {

    public static void main(String[] args) {

        System.out.println(compare("Mike", "Mike"));    // returns 0
        System.out.println(compare("Mikee", "Mike"));   // returns 1
        System.out.println(compare("Mike", "Mikee"));   // returns -1
    }

    public static int compare(String s1, String s2) {
        for (int i = 0; i < Math.min(s1.length(), s2.length()); i++) {
            char c1 = s1.charAt(i);
            char c2 = s2.charAt(i);

            if (c1 > c2) {
                return 1;
            } else if (c2 > c1) {
                return -1;
            }
        }

        if (s2.length() > s1.length()) {
            return -1;
        } else if (s1.length() > s2.length()){
            return 1;
        } else {
            return 0;
        }
    }
}

我使用了一个循环,其中停止条件是最短单词的长度。如果单词在最短单词的长度之后相等,则较长的单词会自动变大。这就是底部的if语句。

答案 1 :(得分:0)

你可以尝试:

public class StringCompare {
    static String testcase1 = "helloworld";
    static String testcase2 = "hellojavaworld";

    public static void main(String args[]){
        StringCompare testInstance = new StringCompare();
        int result = testInstance.newCompare(testcase1,testcase2);
        System.out.println("Result : "+result);
    }

    //write your code here
    public int newCompare(String str1, String str2){
        int l1=str1.length();
        int l2=str2.length();
        int max=0;
        if(l1<=l2)
        {
            max =l1;
        }
        else
        max=l2;
        int count=0;


        for (int i =0;i<max;i++) {
            char ch1=str1.charAt(i);
            char ch2=str2.charAt(i);

            if(str2.charAt(i)>str1.charAt(i))
            {
                return -1;
            }
            if(str1.charAt(i)>str2.charAt(i))
            {
                return 1;
            }
        }
        if(l1==l2)
        {
            return 0;
        }else if (l1 < l2){
            return -1;
        }else{
            return 1;
        }

     }                

答案 2 :(得分:0)

在这种情况下 String testcase1 =“helloworld”和String testcase2 =“hellojavaworld” 你的 for 循环将从char'h'运行到char'o'(i = 0到i = 4)并且 for 循环中的if条件都不会是满意,一旦我增加到5

 //str1.charAt(i)='w' and str2.charAt(i)=j
 if(str1.charAt(i)>str2.charAt(i))   //w(ASCII=119) > j(ASCII=106)
 {
        return 1;                    //return 1 and control return to the calling function

  }

所以结果= 1 。或者简而言之,您的代码正常运行。 您可以指定输出的内容。