繁体   English   中英

字符串比较不返回正确的答案

[英]string comparing doesn't return right answere

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

例:

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

这将作为输出更大返回。 当数字小于1000时,650有点奇怪。

怎么样,怎么改变它? (是的,数字必须是文本格式)。

我想做这个:

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应该在我之前提到的范围之间。

您正在比较这些示例中的字符串而不是整数。 在这种情况下,结果将是字母比较。 无论后续角色是什么,'6'都是'1'。

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

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

String.compareTo()

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

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

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

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

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

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

目前你正在比较实际的字符串内容。 这并不关心你是否写了1000.它不会把它解释为数字。

尝试这个

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

无法使用compareTo()方法将两个数字作为String进行比较。

相比于()

compareTo()方法使用基于unicode的值。 这意味着如果你使用compareTo()方法,它会按字母顺序对它进行基本排序。 此外, compareTo()方法主要仅用于值,具有可实现的Comperable接口。

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

string.equals(comparestring);

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

Integer.parseInt(string);

如果您希望将其返回到String,因为您希望将其放在String LinkedList中或仅作为输出,请使用:

string.toString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM