我对Java编程/算法问题还很陌生,我无法弄清这种排序算法。
因此,假设我在数组或arraylist中有多个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()
方法时,这些字符串中包含数字。我很难用这种排序算法来构建逻辑。
我研究了自然排序方法,但是由于我很新,因此我不确定自己是否走对了路。
那么我要按字符比较此字符并检查当前索引是否为数字?还是我将每个char转换为十六进制值并比较类似的字符串?
java是否提供任何可以帮助我解决这种分离的方法?
我们将不胜感激任何帮助,指导,文档,摘要。
致谢。
答案 0 :(得分:2)
您可以在Collections.sort()
方法中提供一个比较器,该方法将对输入字符串中的任何数字进行排序:
List<String> list = ... ; //your list
Collections.sort(list, (a, b) -> a.replaceAll("[\\d]", "").compareTo(b.replaceAll("[\\d]", "")));
答案 1 :(得分:1)
通常用于排序的是人工排序键。
要使连续的数字映射到同一符号,可以这样做:
private String sortKey(String s) {
return s.replaceAll("\\d+", "0");
}
将10和99都替换为0。
正则表达式:
\\d
位数字+
:一个或多个答案 2 :(得分:0)
Comparator
对第二个列表进行排序。自定义对象将由以下内容组成:
自定义Comparator
仅将使用修改后的字符串和数字进行比较。