Java 根据字符串中的字符和数字比较包含数字的字符串

Java 根据字符串中的字符和数字比较包含数字的字符串,java,Java,我想要一个比较方法,它比较使用字符和数字进行比较的字符串 假设我有两个字符串:s1=“abc 123”和strings2=“abc 45a”当使用java的比较方法时,我的结果是s2>s1,但我想要一个返回s1>s2的比较方法(因为123>45) 对于另一个示例,s3=“def45”,s4=“abc100”我希望比较方法返回s3>s4,因为d>a java有这样的内置方法吗?您可以这样做: private Integer extcartNumberFromString(String str)

我想要一个比较方法,它比较使用字符和数字进行比较的字符串

假设我有两个字符串:s1=“abc 123”和strings2=“abc 45a”当使用java的比较方法时,我的结果是s2>s1,但我想要一个返回s1>s2的比较方法(因为123>45)

对于另一个示例,s3=“def45”s4=“abc100”我希望比较方法返回s3>s4,因为d>a
java有这样的内置方法吗?

您可以这样做:

 private Integer extcartNumberFromString(String str) {
    return Integer.parseInt(str.replaceAll("[^0-9]", ""));
  }
范例

String s = "abc125";
String c = "abc12";
Integer a= extcartNumberFromString(s); // 125
Integer b = extcartNumberFromString(c); //12
System.out.println(a.compareTo(b)); // 1 because a > b
这里有一个想法:

public class MyStringComparator implements Comparator<String> {
    @override
    public int compare(String a, String b) {
        // replace digits by ""
        String aLetters = a.replaceAll("\d", "");
        String bLetters = b.replaceAll("\d", "");

        int diff = aLetters.compareTo(bLetters);
        if (diff != 0) {
            return diff;
        }

        // diff == 0 means, that strings are equal

        // replace non-digits by ""
        String aDigits = a.replaceAll("\D", "");
        String bDigits = b.replaceAll("\D", "");

        int aNumber = Integer.parseInt(aDigits);
        int bNumber = Integer.parseInt(bDigits);

        return aNumber - bNumber;
    }
}

没有java没有内置的方法,如果你想的话,你可以很容易地为它编写代码。只需使用正则表达式,只获取数字,然后比较它们(使用简单的减法?)如果你将numbres转换为整数(object),你可以使用compare to,但我认为这就像用大炮杀死苍蝇一样。所以,
ab1
abc2
应该如何比较?这里的
1
c
2
相比吗?我想要“ac1”<“ac2”,因为1public static void main(String[] args) { MyStringComparator c = new MyStringComparator(); displayResult(c, "abc 123", "abc 45a"); displayResult(c, "def45", "abc100"); } public static void displayResult(MyStringComparator c, String s1, String s2) { int result = c.compare(s1, s2); if (result < 0) { System.out.println("s1 < s2"); } if (result > 0) { System.out.println("s1 > s2"); } if (result == 0) { System.out.println("s1 = s2"); } }