我正在寻找一种比较两个字符串的解决方案。我已经找到了一些建议,但我并不真正理解如何做到这一点。我想做那样的事情:
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 ..
但为什么我要相互比较字符串,然后将它与零进行比较?我真的很困惑。
答案 0 :(得分:6)
您无法使用a < b
在java中执行String
。您必须使用compareTo或Comparator。
你也不能写String a = 23;
。您可以将它们转换为整数,然后执行a < b
。
答案 1 :(得分:5)
a.compareTo(b)
此方法调用的结果:
如果a按字母顺序排在前面(例如a =“apple”,b =“bananna”),则为负数(因此<0)
如果是相同的字符串,则为0
如果a按字母顺序排在后面,则为正数
如果要比较数值,可以在整数上进行比较,也可以先解析字符串,例如
。if (Integer.parseInt(a) < Integer.parseInt(b)){
...
} else {
...
}
答案 2 :(得分:1)
直接比较a
和b
只是比较其内部引用。
注意(正如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
当a
和b
都从同一个字符串初始化时,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