当前位置: 首页 > 知识库问答 >
问题:

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

皇甫波峻
2023-03-14

如果第一个字符串在字典上大于第二个字符串,它应该返回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个答案

朱季
2023-03-14

在这种情况下,当字符串testcase1=“helloworld”和字符串testcase2=“hellojavaworld”时,for循环将从char“h”运行到char“o”(i=0到i=4),并且for循环中的if条件都不会得到满足,只要i增加到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。或者简而言之,您的代码正在正常工作。您可以指定您希望输出是什么。

樊桐
2023-03-14

您可以尝试:

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;
        }

     }                
爱刚捷
2023-03-14

下面是一个简单的答案

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语句的目的。

 类似资料:
  • 本文向大家介绍在Java中按字典顺序比较两个字符串,包括了在Java中按字典顺序比较两个字符串的使用技巧和注意事项,需要的朋友参考一下 String类的方法。此方法按字典顺序比较两个字符串。比较是基于字符串中每个字符的Unicode值。在字典上比较此String对象表示的字符序列与自变量字符串表示的字符序列。该方法返回 如果当前String对象在字典上在参数字符串之前,则为负整数。 如果当前Str

  • 本文向大家介绍在C#中按字典顺序比较两个字符串,包括了在C#中按字典顺序比较两个字符串的使用技巧和注意事项,需要的朋友参考一下 要比较C#中的字符串,请使用方法。它比较两个字符串并返回以下整数值- 在String.compare()方法中设置两个字符串并进行比较- 示例 您可以尝试运行以下代码以比较C#中的两个字符串。 输出结果

  • 问题内容: 我想按字母顺序比较上述两个字符串(在本例中为“ Project”,然后是“ Sunject”,因为“ P”在“ S”之前)。有谁知道如何用Java做到这一点? 问题答案: 可能需要或可能不需要。 如果需要本地化的字符串排序,请查看此链接。

  • 问题内容: 例如,如果我要比较字符串“ Hello”和“ World”。 怎么知道Hello大于World? 我唯一能想到的是,也许它使用ASCII表作为参考? 谢谢您的帮助! 问题答案: 它按 字典顺序 比较两个字符串。在String API中 检查此处。 如果两个字符串不同,那么它们要么在某个索引处具有不同的字符(这是两个字符串的有效索引),要么它们的长度不同,或者两者都不同。如果它们在一个或

  • 问题内容: 我想在很大的字符串的特定位置找到字符。但是我无法使用方法,因为范围超出了int的范围。有什么调整吗? 问题答案: 在Java中,字符串由字符数组支持。数组的理论大小受的最大值限制,因此不可能有超过2 31 -1个字符的字符串开头。 要解决此问题,您可以创建自己的使用多个数组或字符串作为存储的字符串类。

  • 问题内容: 我试图弄清楚如何将字符串中的字符与字符串中的下一个字符进行比较。例如,如果我有一个字符串: 我希望能够将第一个字符与第二个字符进行比较,如果第二个字符大于或等于第一个字符(按字母顺序,a e,y = y等),我想将1加到另一个变量(基本上是一个计数器)。如果不是,我想将计数器重置为0。基本上重复整个过程以获取字符串的长度。如果计数器变得大于maxlen变量,则将一个加到maxlen(或