【问题标题】:Sorting a String in java在java中对字符串进行排序
【发布时间】:2015-02-09 03:06:15
【问题描述】:

我正在尝试在 java 中对字符串进行排序,下面是我的代码:

public class SortingString {

    public static void Sortstring(){
        String str="String";
        char [] charStr = str.toCharArray();
        for (char value : charStr) {
              System.out.println("Value = " + value);
            }

        Arrays.sort(charStr);

        System.out.println("The sorted array is:");
         for (char value : charStr) {
              System.out.println("Value = " + value);
            }

    }

    public static void main(String [] args){
        Sortstring();
    }
}

所以当我输入 str="Java" 时,它给了我:

Value = J
Value = a
Value = v
Value = a
The sorted array is:
Value = J
Value = a
Value = a
Value = v

当我输入 str="String" 时,它给了我:

Value = S
Value = t
Value = r
Value = i
Value = n
Value = g
The sorted array is:
Value = S
Value = g
Value = i
Value = n
Value = r
Value = t

我不明白为什么它没有对所有字符进行排序。它不是对第一个字符进行排序,但它对字符串中的其余字符运行良好。我错过了什么?

【问题讨论】:

  • 如果你想要一个特殊的排序顺序,你需要使用collate your Strings
  • 是的,你是对的!感谢您的帮助!

标签: java arrays string sorting char


【解决方案1】:

你缺少的是拉丁大写字母比较小于拉丁小写字母。 Unicode字符码表的相关部分可以找到here

如果你想让它表现得不同,你需要提供你自己的比较器。见How to use Comparator in Java to sort

实现所需行为的一种方法是让比较器将两个字母都转换为小写,然后比较结果。

【讨论】:

    【解决方案2】:

    排序方法,当用于原始数组(如char[]int[]等)时,使用关系运算符(如><)来比较不同的元素。

    由于所有大写字母都比对应的小写字母“小”,因此结果数组没有按字母顺序排序。

    以下表达式将帮助您了解排序算法执行期间发生的情况:

    'A' < 'a' // true
    (int) 'A' // 65
    (int) 'a' // 97
    

    对象上执行sort方法时,compareTo方法(在Comparable中定义)返回的值用于确定结果数组的顺序。 p>

    如果您想按字母顺序(忽略大小写)对字符串数组进行排序,您可以使用内置的CASE_INSENSITIVE_ORDER 比较器。下面的例子:

    Arrays.sort(arrayOfStrings, String.CASE_INSENSITIVE_ORDER);
    

    否则:

    Collections.sort(listOfStrings, String.CASE_INSENSITIVE_ORDER);
    

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 2014-08-02
      • 1970-01-01
      • 2014-11-14
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多