首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按字母顺序对包含数字的字符串进行排序

按字母顺序对包含数字的字符串进行排序
EN

Stack Overflow用户
提问于 2019-04-16 15:14:53
回答 3查看 96关注 0票数 1

我对Java的编程/算法问题非常陌生,我不能理解这种类型的排序算法。

假设我在一个数组或数组列表中有多个String元素。

代码语言:javascript
复制
"She ate 10 eclair"
"She ate 99 donuts"
"She had 20 eclair"
"She had 10 eclair"

当我对这些字符串进行排序时,算法问题要求我跳过数字,首先按字母顺序排序。如下所示:

代码语言:javascript
复制
"She ate 99 donuts"
"She ate 10 eclair"
"She had 10 eclair"
"She had 20 eclair"

因此,当我使用常规的Collections.sort()compareTo()方法时,它涉及到这些字符串中的数字。我很难从这个排序算法中构建逻辑。

我已经研究了自然排序方法,但我不确定我是否在正确的轨道上,因为我是非常新的。

那么我是不是要按字符比较这个值,并检查当前索引是不是一个数字?或者我要将每个字符转换成十六进制值,然后像这样比较字符串?

java提供了什么方法来帮助我解决这种分离问题吗?

任何帮助,方向,文档,片段将非常感谢。

致以问候。

EN

回答 3

Stack Overflow用户

发布于 2019-04-16 15:23:04

您可以提供一个比较器into Collections.sort()方法,它可以对输入字符串中的任何数字进行排序:

代码语言:javascript
复制
List<String> list = ... ; //your list
Collections.sort(list, (a, b) -> a.replaceAll("[\\d]", "").compareTo(b.replaceAll("[\\d]", "")));
票数 2
EN

Stack Overflow用户

发布于 2019-04-16 15:23:27

为了排序,通常会导出一个人工排序关键字。

对于要映射到同一符号的连续数字,可以这样做:

代码语言:javascript
复制
private String sortKey(String s) {
    return s.replaceAll("\\d+", "0");
}

它会将10和99都替换为0。

正则表达式:

  • \\d digit
  • 后缀运算符+:一个或多个
票数 1
EN

Stack Overflow用户

发布于 2019-04-16 17:17:39

  1. 将字符串列表转换为自定义对象列表。这些自定义对象中的每一个都包含对相应原始字符串的引用。
  2. 使用自定义Comparator.
  3. Convert对第二个列表进行排序,将第二个列表重新排序为字符串列表(通过提取原始字符串)。

自定义对象将由以下内容组成:

对原始数字字符串(例如,用“%”替换的数字)的引用

  • 数字(或数字列表)

自定义Comparator只会使用修改后的字符串和数字进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55702563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档