有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

排序字母数字字符串列表:java

我有字符串列表

String[] list = ...

其中元素仅包含字母数字字符。我想做的是对列表中的每个元素进行排序,使数字排在第一位,然后是大写字母的字母表,然后是小写字母的字母表

例如,使用输入列表

u78t
U78
7u8
X92

输出将是

7u8
U78
X92
u78t

我一直在努力寻找正确的方法,我也一直在阅读关于比较法的文章,但这有点让人不知所措,至少我想知道它们是否是我为了实现我的目标而应该考虑的

谢谢

编辑:IKo的答案非常有效。但是,我应该要求允许字符串中包含非字母数字字符。每个字符串中至少有一个字母数字字符,排序时应忽略(但保留)任何非字母数字字符

例如,输入

&Bd
*$8

回报应该是

*$8
&Bd

因为非字母数字会被忽略(但会被保留),而数字会出现在(大写)字母之前。然而,IKo的代码产生了相反的顺序。我试图将IKo的代码修改为follows

private String[] sort(String[] input) {
        return Arrays.stream(input)
                .map(s -> s.replaceAll("[^a-zA-Z0-9]", ""))
                .sorted()
                .toArray(String[]::new);
    }

这意味着在排序时删除非数字,但这似乎是错误的方法,我以为replaceAll只会在排序时删除非字母数字,但输出本身已经删除了非字母数字。换句话说,现在所有元素的顺序都是正确的,但是元素已经被改变了,这是我不想要的


共 (1) 个答案

  1. # 1 楼答案

    你可以这样使用:

    private String[] sort(String[] input) {
            return Arrays.stream(input)
                    .sorted()
                    .toArray(String[]::new);
        }