我对Java的编程/算法问题非常陌生,我不能理解这种类型的排序算法。
假设我在一个数组或数组列表中有多个String元素。
"She ate 10 eclair"
"She ate 99 donuts"
"She had 20 eclair"
"She had 10 eclair"当我对这些字符串进行排序时,算法问题要求我跳过数字,首先按字母顺序排序。如下所示:
"She ate 99 donuts"
"She ate 10 eclair"
"She had 10 eclair"
"She had 20 eclair"因此,当我使用常规的Collections.sort()或compareTo()方法时,它涉及到这些字符串中的数字。我很难从这个排序算法中构建逻辑。
我已经研究了自然排序方法,但我不确定我是否在正确的轨道上,因为我是非常新的。
那么我是不是要按字符比较这个值,并检查当前索引是不是一个数字?或者我要将每个字符转换成十六进制值,然后像这样比较字符串?
java提供了什么方法来帮助我解决这种分离问题吗?
任何帮助,方向,文档,片段将非常感谢。
致以问候。
发布于 2019-04-16 15:23:04
您可以提供一个比较器into Collections.sort()方法,它可以对输入字符串中的任何数字进行排序:
List<String> list = ... ; //your list
Collections.sort(list, (a, b) -> a.replaceAll("[\\d]", "").compareTo(b.replaceAll("[\\d]", "")));发布于 2019-04-16 15:23:27
为了排序,通常会导出一个人工排序关键字。
对于要映射到同一符号的连续数字,可以这样做:
private String sortKey(String s) {
return s.replaceAll("\\d+", "0");
}它会将10和99都替换为0。
正则表达式:
\\d digit+:一个或多个发布于 2019-04-16 17:17:39
Comparator.自定义对象将由以下内容组成:
对原始数字字符串(例如,用“%”替换的数字)的引用
自定义Comparator只会使用修改后的字符串和数字进行比较。
https://stackoverflow.com/questions/55702563
复制相似问题