如何解决按自然顺序比较字符串但忽略字符串的前缀
我正在努力以忽略前缀的自然顺序对字符串流(或列表,如果您愿意)进行排序。 前缀总是以 let 开头,后面可以跟任何数字(例如,let12 或 let3021)
样本输入:
let3 art zero
let2 own kit dig
let1 art can
示例所需的输出:
let1 art can
let3 art zero
let2 own kit dig
我尝试过的一个简单的想法是执行以下操作:
list.stream().sorted();
但是数字妨碍了,产生以下输出:
let1 art can
let2 own kit dig
let3 art zero
怎样才能以简单的方式达到这个结果?理想的解决方案是 Comparator,或者任何我可以在流中使用的东西。
注意:我尝试使用比较器失败,因为前缀可以是任意长度。
感谢您抽出宝贵时间。
解决方法
您正在回答自己的问题:使用比较器。
Comparator<String> marcosPrefixIgnoringComparison =
(a,b) -> a.substring(4).compareTo(b.substring(4));
假设前缀定义为“前 4 个字符”。如果它更多是“字符串let
,然后是任意数量的数字”,则您必须做其他事情。可能是正则表达式:
Comparator<String> marcosPrefixIgnoringComparison =
(a,b) -> a.replaceFirst("^let\\d+\\s+","").compareTo(
b.replaceFirst("^let\\d+\\s+",""));
你的问题不是特别清楚“前缀”是什么意思,在这里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。