0

我想用 compareTo() 函数比较 2 个字符串。

例子:

int result = "650".compareTo("651");
    if(result < 0){
        System.out.println("smaller");
    } else if(result > 0){
        System.out.println("bigger");
    } else {
        System.out.println("equals");
    }
    System.out.println(result);

这将输出更小,这是正确的。

示例 2:

int result = "650".compareTo("1000");
    if(result < 0){
        System.out.println("smaller");
    } else if(result > 0){
        System.out.println("bigger");
    } else {
        System.out.println("equals");
    }
    System.out.println(result);

这将随着输出变大而返回。这有点奇怪,因为 650 因为数字小于 1000。

怎么样,我该如何改变它?(是的,数字需要采用文本格式)。

我想做这个:

int result = "650/65".compareTo("1050/50");
    if(result < 0){
        System.out.println("smaller");
    } else if(result > 0){
        System.out.println("bigger");
    } else {
        System.out.println("equals");
    }

这返回“650/65”大于“1050/50”但实际上它更小。

编辑

我已经解决了这些案例,现在是这样的:

String maat = "650/65";
    int subMaatB = 0;
    int subMaatA = 0;

    if(maat.contains("/")){
        try{
            subMaatA = Integer.parseInt(maat.substring(0, maat.lastIndexOf("/")));
            subMaatB = Integer.parseInt(maat.substring(maat.lastIndexOf("/")+1));
        } catch (NumberFormatException e){

        }
    }

    boolean resultA = subMaatA >= 440;
    boolean resultB = subMaatB >= 65;
    boolean resultC = subMaatA <= 1050;
    boolean resultD = subMaatB <= 50;
    if(resultA && resultB && resultC && resultD){
        System.out.println("BIGGER");
    } else {
        System.out.println("Smaller");
    }

因此,Maat 必须在 440/65 和 1050/50 的范围内。Maat 应该在我之前提到的范围之间。

4

6 回答 6

1

您在这些示例中比较的是字符串而不是整数。在这种情况下,结果将是字母比较。'6' > '1' 不管后面的字符是什么。

于 2013-08-28T10:28:43.003 回答
1

"3".compareTo("2")一样好 "three".compareTo("two")

这意味着它们都是字符串比较。

String.compareTo()

按字典顺序比较两个字符串。比较基于字符串中每个字符的 Unicode 值。此 String 对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此 String 对象按字典顺序位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;当 equals(Object) 方法返回 true 时,compareTo 返回 0。

这是字典顺序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符,该索引是两个字符串的有效索引,或者它们的长度不同,或两者兼而有之。如果它们在一个或多个索引位置具有不同的字符,则设 k 为此类索引中的最小;然后,在位置 k 处的字符具有较小值的字符串(通过使用 < 运算符确定)按字典顺序位于另一个字符串之前。在这种情况下,compareTo 返回两个字符串中位置 k 处的两个字符值的差值——即值:

this.charAt(k)-anotherString.charAt(k) 如果它们没有不同的索引位置,则较短的字符串按字典顺序排列在较长的字符串之前。在这种情况下, compareTo 返回字符串长度的差值——即值:

如果要将它们作为整数进行比较,则必须先将它们转换为整数。

于 2013-08-28T10:31:04.003 回答
0

字符串比较按字典顺序比较字符串,因此“6...”大于“1...”。要比较数值,您应该将字符串转换为数值类型

于 2013-08-28T10:30:05.043 回答
0

Integer.parseInt(String)在比较之前,您需要通过(比如说)将您的字符串转换为数字。

目前您正在比较实际的字符串内容。这并不关心你是否写过 1000。它不会将它解释为一个数字。

于 2013-08-28T10:30:28.730 回答
0

试试这个

int inputOne = Integer.parseInt("650");
int inputTwo = Integer.parseInt("1000");
int result = inputOne - inputTwo;
    if(result < 0){
        System.out.println("smaller");
    } else if(result > 0){
        System.out.println("bigger");
    } else {
        System.out.println("equals");
    }
    System.out.println(result);
于 2013-08-28T10:36:06.093 回答
0

不能使用 compareTo() 方法将两位数字作为字符串进行比较。

相比于()

compareTo()方法使用基于 unicode 的值。这意味着如果您使用compareTo()方法,它会按字母顺序对其进行排序。此外,compareTo()方法大多只用于值,具有实现 Comperable 接口。

如果要比较两个字符串,则必须使用

string.equals(comparestring);

对于您的示例,您必须将字符串转换为整数。你这样做:

Integer.parseInt(string);

如果你想把它放回一个字符串,因为你想把它放在一个字符串 LinkedList 中或者只是作为一个输出,使用:

string.toString();
于 2013-08-28T10:57:36.057 回答