【问题标题】:How do I sort an array ignoring capitalization?如何对忽略大小写的数组进行排序?
【发布时间】:2015-02-02 19:46:35
【问题描述】:

我使用 sort() 按字母顺序对数组进行排序,但它是从 A-Z 到 a-z。我尝试预先将每个单词大写,但除非它被打印出来,否则它不起作用,这应该在排序之后发生。目前,使用此代码,它将以大写字母列出学生,但如果输入为小写,则将其排序为小写。在将输入分配给数组之后,将 capitalize() 放在初始的 for 循环中是行不通的。有什么解决办法吗?

import java.util.Scanner;
import java.util.Arrays;

public class Pupils {
public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    boolean loop = true;
    int names = 0;

    String[] ay = new String[1000];

    for(int i = 0; loop == true; i++) {
            System.out.println("Enter name: ");
            ay[i] = scan.nextLine();
            names++;
            if (ay[i].equals("0")) {
                loop = false;
                ay[i] = " ";
        }
    }

    String[] aay = new String[names - 1];

    for(int i = 0; i < aay.length; i++) {
        aay[i] = ay[i];
    }

    if (names == 1) {
        System.out.print("There are no people in our class.");
    } else if (names == 2) {
        System.out.print("The person in our class is ");
    } else {
        System.out.print("The people in our class are ");
}
    Arrays.sort(aay);
    for(int i = 0; i < names - 1; i++) {
        if(i == names - 2) {
            System.out.print(capitalize(aay[i]) + ".");
        } else if (i == names - 3) {
            System.out.print(capitalize(aay[i]) + " and ");
        } else {
            System.out.print(capitalize(aay[i]) + ", ");
        }
    }

}
public static String capitalize(String line)
{
  return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}

}

【问题讨论】:

标签: java arrays sorting


【解决方案1】:

使用Arrays.sort() with a Comparator 怎么样?注意有一个suitable comparator defined in String,所以:

Arrays.sort(aay, String.CASE_INSENSITIVE_ORDER);

应该做的工作。

【讨论】:

  • 甚至已经制作了一个:String.CASE_INSENSITIVE_ORDER
  • 这仅适用于 ASCII 字符。例如,字符串“pirate”将排在“piñata”之前。按字母顺序排序的正确方法是使用Collator,通常使用Collator.getInstance() 获得。
【解决方案2】:

我建议将数组中的所有数据以小写形式存储。它将简化排序和搜索(如果您在数组中搜索一个学生,并且输入为“Walter”并且您正在寻找“walter”,您将找不到它。如果您同时使用小写字母对于存储和搜索,它都可以工作)。

而且由于您无论如何都将名称大写以进行打印,因此名称仍将大写。

所以不要这样做

        ay[i] = scan.nextLine();

你可以这样做:

        ay[i] = scan.nextLine().toLowerCase();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2016-07-05
    相关资源
    最近更新 更多