在Java中与字符串相比较

时间:2010-12-12 09:00:17

标签: java

我正在寻找一种比较两个字符串的解决方案。我已经找到了一些建议,但我并不真正理解如何做到这一点。我想做那样的事情:

String a = 23;
String b = 2;

if (a < b)
System.out.println("...");
else ..

我找到了compareTo方法,但我不了解它背后的想法。代码类似于:

String a = 23;
String b = 2;

if (a.compareTo(b) < 0)
System.out.println("...");
else ..

但为什么我要相互比较字符串,然后将它与零进行比较?我真的很困惑。

6 个答案:

答案 0 :(得分:6)

您无法使用a < b在java中执行String。您必须使用compareToComparator。 你也不能写String a = 23;。您可以将它们转换为整数,然后执行a < b

答案 1 :(得分:5)

阅读compareTo

的API
a.compareTo(b)

此方法调用的结果:
如果a按字母顺序排在前面(例如a =“apple”,b =“bananna”),则为负数(因此<0) 如果是相同的字符串,则为0 如果a按字母顺序排在后面,则为正数

如果要比较数值,可以在整数上进行比较,也可以先解析字符串,例如

if (Integer.parseInt(a) < Integer.parseInt(b)){
   ...
} else {
 ...
}

答案 2 :(得分:1)

直接比较ab只是比较其内部引用

注意(正如Jon指出的那样)你甚至不能在字符串上使用<运算符,尽管你可以使用==运算符。

但是,为了比较他们的内容,您必须使用equals()comparesTo()方法。

说明==问题:

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

        // two identical strings
        String a = "foo";
        String b = "foo";

        // and the result of comparing them
        System.out.println(" ==              returns " + (a == b));
        System.out.println(" String.equals() returns " + a.equals(b));

        // append the same string on the end of each
        a += "bar";
        b += "bar";

        // and compare them again
        System.out.println(" ==              returns " + (a == b));
        System.out.println(" String.equals() returns " + a.equals(b));
    }
}

% java foobar
 ==              returns true
 String.equals() returns true
 ==              returns false
 String.equals() returns true

ab都从同一个字符串初始化时,string interning初始化两个引用以查看该不可变字符串。这意味着最初 a == b是真的。

但是,只要您修改它们,即使内容最终相同,==测试也会失败。

答案 3 :(得分:1)

这样做,它会给出正确的结果

  String s = "22";
        string s1 = "2";
        string output = "";
        if (s.CompareTo(s1) > 0)
            output = "S is grater";
        else
            output = "s is smaller";  

答案 4 :(得分:1)

如果需要比较数字,则需要覆盖compare()方法,因为java不允许覆盖运算符。 你可以使用这样的东西:

public class TestString implements Comparator<String> {
    private static TestString ts = new TestString();
    static public int compareStrings(String s1, String s2) {
        return ts.compare(s1, s2);
    }

    public int compare(String s1, String s2) {
        Integer i1 = Integer.parseInt(s1);
        Integer i2 = Integer.parseInt(s2);
        if (i1 == i2) {
            return 0;
        } else if (i1 < i2) {
            return -1;
        } else {
            return 1;
        }
    }

    static public void main(String[] args) {
        String s1 = "10";
        String s2 = "3";
        if (TestString.compareStrings(s1, s2) < 0) {
            System.out.println("<");
        } else if (TestString.compareStrings(s1, s2) > 0) {
            System.out.println(">");
        }
    }
}

但如果您需要实际比较值(不是为了订购),那么您可以看一下程序设计,也许需要进行一些更改。

答案 5 :(得分:1)

如果要使用大于小于运算符的值,请不要使用String。如果要稍后将其更改为字符串useInteger.toString(a)

,请使用int