实现我自己的字符串比较

时间:2014-07-16 12:49:52

标签: java string comparison

我收到了字符串比较的问题。我不得不编写一个方法来比较两个字符串,而不使用java的内置字符串比较方法。此外,它假设长约3-5行代码。该方法应返回0表示相等,1表示字符串'a'大于字符串'b',-1表示字符串'a'小于'b'

现在,我知道Java会根据每个字符的int值来比较字符串,所以我尝试做这件事情,但这肯定不是3-5行代码:

public int compare(String s1, String s2){

    int result = 0;
    int count = 0; // The counter for the first string integer values sum
    int count2 = 0; // The counter for the second string integer values sum

    for(int c=0; c<s1.length(); c++){
        count = count +s1.charAt(c);
    }

    for (int c2=0; c2<s2.length(); c2++){
        count2 = count2 +s2.charAt(c2);
    }

    //***** some condition statement to check which is bigger and then return the result

5 个答案:

答案 0 :(得分:4)

您是否考虑过进行简单的词典比较,而不是比较长度(或者您尝试做的任何事情,它并不是特别容易辨别):

for(int i=0; i<a.length() && i<b.length(); i++) {
    if(a.charAt(i) != b.charAt(i))
        return a.charAt(i) < b.charAt(i) ? -1 : 1;
}
return a.length() < b.length() ? -1 : a.length() == b.length() ? 0 : 1;

除了它只使用公共方法之外,它基本上与java.lang.String所做的相同。

答案 1 :(得分:0)

考虑2个String ab解决方案可能是:

int comp = 0;
for(int i = 0; i < Math.min(a.length(), b.length()); i++) 
    if((comp = a.charAt(i) - b.charAt(i)) != 0)
        return comp;
return a.length() < b.length() ? -1 : a.length() == b.length() ? 0 : 1;

计算同一位置中每个char的差异,直到较小的String长度,如果它们都是0,则返回较小的String

编辑:我不知道下注的原因可能是,但无论如何快速测试它按预期工作(并且它的长度为5行)。

答案 2 :(得分:0)

我认为这种递归方法可能对您有用:

public static int compare(String a, String b, int pos){
    if(a.charAt(pos) == b.charAt(pos) && pos >= a.length() && pos >= b.length())
        return 0;
    else if(a.charAt(pos) > b.charAt(pos))
        return 1;
    else if(a.charAt(pos) < b.charAt(pos))
        return -1;
    else {
        pos++;
        if(pos < a.length() && pos < b.length())
            return compare(a,b,pos);
        else if(pos < a.length() && pos >= b.length())
            return 1;
        else if(pos >= a.length() && pos < b.length())
            return -1;
        else return 0;
    }
}

您必须使用compare上的变量pos在main上调用0方法,如下所示:

public static void main(String[] args) {

    String a = "azzz";
    String b = "azz";

    System.out.println("" + compare(a,b,0));
}

希望这有帮助。

答案 3 :(得分:0)

这是我的尝试。我测试了一下它似乎工作。如果没有,那么抱歉。我有很多需要学习的东西。

所以,我的尝试是基于如何用Java处理字符串,即它们是不可变的。您创建的任何String都会进入“常量字符串池”。当您对池中已存在的String进行新引用时,JVM会使该引用指示池中已存在的String对象。所以我认为很明显,2个相同的String引用指向完全相同的String对象,即使它们是单独创建的。基于此,如果引用相等,我的方法返回0,否则返回其他内容。请原谅最后的回报,我知道它很难看,程序将无法编译。我也知道(希望)它无法到达。这是函数(6行):

public int compare(String s1, String s2) {

    if (s1 == s2) return 0;
    else {
        for (int i = 0; i < Math.min(s1.length(), s2.length()); i++) {
            if (s1.charAt(i) > s2.charAt(i)) return 1;
            else return -1;
        }
    }
    return -2;
}

答案 4 :(得分:-2)

这应该有用......(避开编译所以不是100%肯定)。我知道它不是&lt; t&lt; 5行,但它应该正常工作。之后可以尝试缩短它。

for(int i=0; i < s1.length(); i++)
{
    if(s2.length()-1 < i)
      return -1;
    if(s1.charAt(i) > s2.charAt(i))
      return -1;
    if(s1.charAt(i) < s2.charAt(i))
      return 1;
}
if(s2.length() > s1.length())
  return 1;
return 0;