将字符串转换为字符并按降序排序(ASCII)

3
我正在创建一个程序,它将使用户输入整数(一个接一个地),存储在数组中,并按降序显示整数。该程序还会要求用户输入字符串,并使用 string.toCharArray() 将其转换为字符。我已经成功地按降序显示了整数。问题是我不知道如何按降序显示字符。
以下是整数的代码:
for(i=0;i<nums.length;i++){
        System.out.print("Enter value for index["+i+"] here --> ");
        nums[i]=Integer.parseInt(br.readLine());}

while(pass<nums.length){
        for(i=0;i<(nums.length-pass);i++){
            if(nums[i]<nums[i+1]){
                temp=nums[i];
                nums[i]=nums[i+1];
                nums[i+1]=temp;
            }
        }
        pass++;
}
System.out.println("\n\nThe numbers when sorted descendingly are :\n");
    for(i=0;i<nums.length;i++){
        System.out.println(nums[i]);

以下是将字符串转换为数组的代码。这是我遇到问题的地方。在运行程序时没有出现错误,只是我不知道如何正确地执行它。

System.out.print("Input a string");
        String strValue= br.readLine();
        char[] chrValues;
        chrValues=strValue.toCharArray( );

while(flag<chrValues.length){
   for (c=0; c< (chrValues.length- flag); c++){
        if(chrValues[c]<chrValues[i+1]){
         tempo=chrValues[c];
                chrValues[c]=chrValues[c+1];
                chrValues[c+1]= tempo;}
   }
}
 flag++; 
 System.out.println("\n\nThe String when converted in character and sorted descendingly     are :\n");    
    for(c=0;i<chrValues.length;c++){
        System.out.println(chrValues[c]);}

顺便提一下,我使用了flag作为临时数组存储。
2个回答

3
您已经有了内置的方法:-
    String str = "Rohit";
    char[] arr = str.toCharArray();

    System.out.println(arr);
    Arrays.sort(arr);   // Sort in Ascending order
    System.out.println(arr);

对于降序,您可以定义一个Comparator并将其传递给Arrays.sort()方法。
您可以使用Arrays#sortArrayUtils#toObject降序进行排序。
以下是它的工作原理: -
    String str = "Rohit";
    char[] charArray = str.toCharArray();

    Character[] myCharArr = ArrayUtils.toObject(charArray);

    Arrays.sort(myCharArr, new Comparator<Character>() {

        @Override
        public int compare(Character char1, Character char2) {
            return char2.compareTo(char1);
        }
    });

    for (char val: myCharArr) {
        System.out.print(val);
    }

嗨Rohit!感谢您的回复。我能在排序中使用If语句吗?因为在ASCII代码中,“a”与“A”是不同的。谢谢 - kix
@kix.. 所以,你希望它们被视为相同的吗? - Rohit Jain
@rohit 不是的。我希望它们被视为不同的。例如,我将输入"Abca",输出应该为:a c b A。顺便说一下,我们不允许把它们改成小写:( - kix
@rohit - 不好意思啊,我是新来的,在这里还不太熟悉。我本来想点个“赞”或者“+1”的,但看起来只有“接受答案”的按钮可以用。抱歉我的错误。 - kix
@kix.. 没关系,现在你知道了。此外,你可以通过投票赞成答案来给任何答案加上+1。只需点击上箭头,你会看到你接受答案的地方。 - Rohit Jain
显示剩余3条评论

2
你可以尝试。
String str = "AbCdEf";
char[] arr = str.toCharArray();

for(int i = 0; i < arr.length; i++) System.out.print(arr[i]);
System.out.println();

Arrays.sort(arr); // sorted in ascending order

// print them backwards i.e. descending order.
for(int i = arr.length - 1; i >= 0; i--) System.out.print(arr[i]);
System.out.println();

打印

AbCdEf
fdbECA

1
@PeterLawrey.. +1 好的,有时候我们应该使用传统for循环.. 没有必要反向排序.. 太好了 :) - Rohit Jain
@peter - 谢谢你!我会试一下,稍后给你反馈。 - kix
@peter - 为什么我在这段代码中出现可能的精度损失需要:char found int,代码如下for(int i = arr.length - 1; i >= 0; i--) System.out.print(arr[i]); System.out.println(); - kix
@kix,你的复制存在问题,因为它在我的电脑上可以编译和运行。 - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接