【问题标题】:How can i sort char[] array case insensitive? [duplicate]如何对 char[] 数组不区分大小写进行排序? [复制]
【发布时间】:2014-04-16 21:05:59
【问题描述】:

我正在尝试在 Java 中对 char[] 数组进行排序。

我尝试使用List,但效果不佳。
我也尝试使用Arrays.sort(dizimiz,String.case_insensive_order),但出现错误。

这是我的代码:

Scanner sc=new Scanner(System.in);
System.out.println("Please enter text:");
String str=sc.nextLine();

//  toCharArray() splits the string into a character array
char[] chars=str.toCharArray();

Arrays.sort(chars);
for (char c : chars) {
    System.out.println(c);
}

我可以使用什么方法来做到这一点?

【问题讨论】:

  • 使用 String.equalsIgnoreCase()
  • “它没有完美运行”和“我遇到错误”不是问题描述。 (任何语言。)如何它不起作用? 您遇到了什么错误?
  • 为什么要对字符数组中的字符进行排序?为什么不将它们放在UnicodeSet 中?

标签: java arrays


【解决方案1】:

比较器String.CASE_INSENSITIVE_ORDER 仅用于字符串,但您尝试将它与 char 数组一起使用。如果你想使用它,你必须将字符串转换为字符串数组(每个字符串包含一个字符)。

String[] chars = str.split("");
Arrays.sort(chars, String.CASE_INSENSITIVE_ORDER);

for (String c : chars) {
    System.out.println(c);
}

【讨论】:

  • 这肯定比我的回答容易得多。但我想知道在 100 万个字符时哪个答案更有效?
【解决方案2】:

如果你不关心这种情况,你可以改变

char[] dizimiz = str.toCharArray();

char[] dizimiz = str.toLowerCase().toCharArray();

这将完成你的问题

如何对 char[] 数组进行不区分大小写的排序?

如果我在这里遗漏了什么,请告诉我,我会更新我的答案。

根据下面的 cmets,我为您制作了一个粗略的代码,以便使用适当的大小写对输出进行排序和保留。

    char[] dizimiz = str.toCharArray();
    char[] lc = str.toLowerCase().toCharArray();
    char temp;
    Boolean done;
    if (lc.length > 1) do {
        done = true;
        for (int i = lc.length - 1; i > 0; i--) {
        if (lc[i] < lc[i - 1]) {
            temp = lc[i - 1];
            lc[i - 1] = lc[i];
            lc[i] = temp;
            temp = dizimiz[i - 1];
            dizimiz[i - 1] = dizimiz[i];
            dizimiz[i] = temp;
            done = false;
           }
        }
    } while (!done);

【讨论】:

  • 不,不会的。如果 OP 有 b、A、a、C,他想要 A、a、b、C 作为结果,而不是 a、a、b、c
  • 是的,它是真的。我想要 A,a,b,C。我怎样才能这样排序。
  • @JBNizet 我更新了代码来做到这一点。我知道有更简单的方法,但我想看看它是如何在 for 循环中完成的。
  • @user3542379 我更新了我的答案,它会以你想要的方式输出。
  • @CodeCamper:您正在尝试重新实现排序算法,但您的算法不正确。您最好将 char 数组转换为 Character 数组,使用标准算法和自定义 Comparator 对其进行排序,然后将 Character 数组转换回 char 数组。
猜你喜欢
  • 2013-02-11
  • 2011-01-30
  • 2017-11-16
  • 1970-01-01
  • 2018-01-11
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多