我需要编写一个Java Comparator类来比较Strings,但是有一个转折.如果它比较的两个字符串在字符串的开头和结尾是相同的,并且不同的中间部分是整数,则根据这些整数的数值进行比较.例如,我希望以下字符串以它们显示的顺序结束:
如您所见,字符串中可能还有其他整数,因此我不能只使用正则表达式来分解任何整数.我正在考虑从一开始就走绳子,直到找到一点不匹配,然后走到最后,直到找到一个不匹配的位,然后比较中间的位到正则表达式"[0-9] +",如果比较,则进行数值比较,否则进行词法比较.
有没有更好的办法?
更新我不认为我可以保证字符串中的其他数字,可能匹配的数字,周围没有空格,或者不同的数字确实有空格.
我正在尝试编写一个利用最小优先级队列的算法,所以我在谷歌上环顾四周找到了PriorityQueue.看来,为了使用它,我需要告诉它我希望它如何优先排序,并且这样做的方法是使用比较器(我想比较我的"Node1"的特定数据字段)对象).更多的谷歌搜索提出了创建一个新比较器的想法,该比较器实现了比较器,但覆盖了比较方法.我正在尝试的是这个(以及它的其他变体):
import java.util.Comparator;
public class distComparator implements Comparator {
@Override
public int compare(Node1 x, Node1 y){
if(x.dist<y.dist){
return -1;
}
if(x.dist>y.dist){
return 1;
}
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器有几个理由抗议,其中一个原因是我没有超越比较器类(它说它是抽象的)
错误:distComparator不是抽象的,并且不会覆盖Comparator中的抽象方法compare(Object,Object)
我已将其切换为"比较(对象x,对象y)",它负责该问题.此时虽然编译器抱怨它无法在x或y中找到"dist"变量 - 这是有道理的,因为它们是我的Node1类的一部分,而不是Object类.
那应该怎么做呢?它Object显然应该有类型,但是如何将它引导到正确的变量?