【问题标题】:Java not sorting properlyJava没有正确排序
【发布时间】:2023-03-18 23:15:01
【问题描述】:

如何使用取自另一个字符串的字母顺序创建一个字符串?

假设我有这样的东西

String theWord = "Hello";

如何计算新字符串以使其看起来像“

ehllo

这是单词,但按字母顺序逐个字符排序。

我想出了这个,但我不确定为什么它不起作用,它只是打印出“Hello”

char[] chars = theWord.toCharArray();
Arrays.sort(chars);
String newWord = new String(chars);
System.out.println(newWord);

【问题讨论】:

  • 因为大写字母在小写字母之前。
  • 你为什么要责怪Java? Java 有很好的文档记录,它会告诉你它在做什么。 The first rule of programming.

标签: java


【解决方案1】:

是的。因为大写 H 在小写字母之前。

String theWord = "hello";

如您预期的那样输出(代码没有其他更改)

ehllo

【讨论】:

  • 一个快速的解决方案是调用char[] chars = theWord.toLowercase().toCharArray(); 但这确实意味着排序后的单词将全部小写。请注意以供将来参考,字符是根据 ASCII 表排序的,您可以很容易地用谷歌搜索。
  • @PerryMonschau ASCII 中表示的最后一个字符是什么?
  • 现在这取决于我们是否也允许使用 Unicode 字符。您会看到字符不仅仅是字母,还包括任何文本命令,包括换行、退格等。在 8 位模型中,DEL 命令是最后一个字符,但 z 是最后一个字母。但是在 Unicode 中可以有数百万个字符,包括外语字符和数学符号。所以这真的取决于你的意图是什么,它有多重要。
  • @PerryMonschau 我得到的是字符文字仅代表 UTF-16 代码单元。所以他们根据这个来排序,而不是基于 ASCII。
【解决方案2】:

在排序中,大写字母先排序,然后是小写字母。 在您的示例中,由于 H 为大写,因此首先假设您将输入字符串提供为 HEllo,然后您的输出将是 EHllo。此外,如果您提供大写、小写和数字的输入字符串组合,则 sort() 方法会先对数字进行排序,然后是大写,然后是小写。 例如,如果您提供输入字符串为HEllo397,您将获得输出为379EHllo

所以代码没有问题。

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 2020-04-26
    • 2014-09-07
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多