簡體   English   中英

像strcmp一樣獲取字符串之間的整數差

[英]Get integer difference between string just like strcmp

我只需要一個函數,對於兩個給定的字符串,將返回負值,正值或零值。 在C中,使用strcmp

char* a = "Hello";
char* b = "Aargh";

strcmp(a, b);  //-1
strcmp(a, a);  //0
strcmp(b, a);  //1

Java是否有任何簡單直觀的方法來執行此操作,還是必須使用Comparator接口?

Java是否有任何簡單直觀的方法來做到這一點?

是的,它可以: java.lang.String使用compareTo函數實現Comparable<String>接口:

int comparisonResult = a.compareTo(b);

還有一個不區分大小寫的版本:

int comparisonResult = a.compareToIgnoreCase(b);

String.compareTo方法是Java中使用的方法。

如何使用它 :

import java.lang.*;

public class StringDemo {

  public static void main(String[] args) {

    String str1 = "tutorials", str2 = "point";

    // comparing str1 and str2
    int retval = str1.compareTo(str2);

    // prints the return value of the comparison
    if (retval < 0) {
       System.out.println("str1 is less than str2");
    }

    else if (retval == 0) {
       System.out.println("str1 is equal to str2");
    }

    else {
       System.out.println("str1 is greater than str2");
    }
  }
}

輸出:

str1 is less than str2

示例取自: http : //www.tutorialspoint.com/java/lang/string_compareto.htm

compareTo呢?

int value = a.compareTo(b);

您可以使用compareTo,但是如果您想安全的話,還應該包括一個空檢查:

if (a != null){
    result = a.compareTo(b);
} else {
    //decide what to do here
}

正如先前的回答,Java具有內置的String.compareTo(String anotherString)方法,您應該簽出運行時源(應在google中搜索rt.jar )。

但是,這是一個工作示例,對compareTo方法應用了相同的邏輯。

方法實施

public static int stringCompare(String str1, String str2) {
    char[] charArray1 = str1.toCharArray();
    char[] charArray2 = str2.toCharArray();

    int lim = Math.min(charArray1.length, charArray2.length);

    int k = 0;
    while (k < lim) {
        if (charArray1[k] != charArray2[k]) {
            return charArray1[k] - charArray2[k];
        }
        k++;
    }
    return charArray1.length - charArray2.length;
}

示范代碼

public class StringCmp1 {

    public static void main(String[] args) {
        String str1 = "aa";
        String str2 = "ad";

        System.out.println("Comparison of '" + str1 + "' and '" + str2 + "'");
        System.out.println("Custom Method    : " + str1.compareTo(str2));
        System.out.println("Built-in Method  : " + stringCompare(str2, str1));

        System.out.println("\nComparison of '" + str2 + "' and '" + str1 + "'");
        System.out.println("Custom Method    : " + str2.compareTo(str1));
        System.out.println("Built-in Method  : " + stringCompare(str1, str2));
    }

    public static int stringCompare(String str1, String str2) {
        char[] charArray1 = str1.toCharArray();
        char[] charArray2 = str2.toCharArray();

        int lim = Math.min(charArray1.length, charArray2.length);

        int k = 0;
        while (k < lim) {
            if (charArray1[k] != charArray2[k]) {
                return charArray1[k] - charArray2[k];
            }
            k++;
        }
        return charArray1.length - charArray2.length;
    }

}

輸出量

Comparison of 'aa' and 'ad'
Custom Method    : -3
Built-in Method  : 3

Comparison of 'ad' and 'aa'
Custom Method    : 3
Built-in Method  : -3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM