Java 根据字符串中的字符和数字比较包含数字的字符串
我想要一个比较方法,它比较使用字符和数字进行比较的字符串 假设我有两个字符串:s1=“abc 123”和strings2=“abc 45a”当使用java的比较方法时,我的结果是s2>s1,但我想要一个返回s1>s2的比较方法(因为123>45) 对于另一个示例,s3=“def45”,s4=“abc100”我希望比较方法返回s3>s4,因为d>aJava 根据字符串中的字符和数字比较包含数字的字符串,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)
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");
}
}