介绍 :
有时我们需要按字母顺序对字符串中的所有字符进行排序。由于String在Java中是不可变的,因此它将创建一个不同的字符串变量。例如,字符串“ albert ”在排序后将变为“ abelrt”。在这个Java示例中,我们将学习如何以不同的方式按字母顺序对字符串的字符进行排序。
让我们来看看 :
使用循环:
任何排序的基本方法是使用循环。我们将使用两个for循环,并且两者都将在另一个内部运行。外循环将从字符串的左侧开始一个接一个的选择,内循环将其与字符串左侧的所有其他元素进行比较。如果发现内循环较小的任何元素,我们将其与外循环指向的元素交换。让我用代码向您展示该算法:
import java.util.Arrays;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        //1
        Scanner scanner = new Scanner(System.in);

//2
        System.out.println("Enter a string : ");
        String userInput = scanner.nextLine();

//3
        char[] charArray = userInput.toCharArray();

//4
        for (int i = 0; i < charArray.length; i++) {
            for (int j = i + 1; j < charArray.length; j++) {
                if (Character.toLowerCase(charArray[j]) < Character.toLowerCase(charArray[i])) {
                    swapChars(i, j, charArray);
                }
            }
        }

//6
        System.out.println("Sorted string " + String.valueOf(charArray));
    }

//5
    private static void swapChars(int i, int j, char[] charArray) {
        char temp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = temp;
    }

}
解释 :
1.    创建一个Scanner对象以读取用户输入值。
2.    要求用户输入一个字符串。读取它并将其存储在userInput变量中。
3.    我们计划比较此字符串的每个字符并交换并按升序排列。由于字符串是不可变的,因此我们需要先将字符串值转换为数组。为此,我们使用toCharArray()返回一个字符数组。
4.    现在,使用两个嵌套的for循环对数组的内容进行排序。在这里,在比较两个字符之前,我们将它们转换为小写字母,因为大写和小写字母的ASCII值都不同。
5.    swapChars函数用于交换数组中的两个字符。它以字符在数组中的位置作为输入。
6.    最后,将排序后的字符串输出给用户。
样本输出:
Enter a string :
Alphabet
Sorted string Aabehlpt

Enter a string :
elephant
Sorted string aeehlnpt
不使用循环排序:
除了使用两个for循环,我们还可以像下面这样直接对字符数组进行排序:
import java.util.Arrays;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

System.out.println("Enter a string : ");
        String userInput = scanner.nextLine();

char[] charArray = userInput.toCharArray();

Arrays.sort(charArray);
        System.out.println("Sorted string " + String.valueOf(charArray));
    }
}
此方法的唯一问题是,它将无法对同时包含大写和小写字母的字符串进行排序。如果字符串仅是大写或小写,它将起作用。
例子 :
Elephant
Sorted string Eaehlnpt

Enter a string :
elephant
Sorted string aeehlnpt

Enter a string :
ELEPHANT
Sorted string AEEHLNPT
使用比较器:
我们可以改进上述程序,以比较所有大写和小写字符,如下所示:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

System.out.println("Enter a string : ");
        String userInput = scanner.nextLine();

//1
        Character[] charArray = new Character[userInput.length()];

for (int i = 0; i < userInput.length(); i++) {
            charArray[i] = userInput.charAt(i);
        }

//2
        Arrays.sort(charArray, Comparator.comparingInt(Character::toLowerCase));

StringBuilder sb = new StringBuilder(charArray.length);
        for (Character c : charArray)
            sb.append(c.charValue());

System.out.println("Sorted string " + sb.toString());
    }
}
1.    首先,我们从字符串创建一个Character数组。
2.    然后,我们传递了一个lambda来比较第二个参数中的字符。lamda实际上如下所示:
Arrays.sort(charArray, new Comparator() {

@Override
           public int compare(Character o1, Character o2) {
               return Character.compare(Character.toLowerCase(o1),
                       Character.toLowerCase(o2));
           }
       });
最后,我们使用StringBuilder将数组转换为字符串。它将按预期排列字符。
例子 :
Enter a string :
Elephant
Sorted string aEehlnpt
使用Java Stream:
Java 8流API提供了一种解决此问题的漂亮方法。
import java.util.Comparator;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

System.out.println("Enter a string : ");
        String userInput = scanner.nextLine();

String finalString =
                Stream.of(userInput.split(""))
                        .sorted(Comparator.comparingInt(o -> Character.toLowerCase(o.charAt(0))))
                        .collect(Collectors.joining());

System.out.println("Sorted string " + finalString);
    }
}
在这里,我们在sorted()方法中使用了与上面相同的比较器。它将给出如下输出:
Enter a string :
Elephant
Sorted string aEehlnpt
 
结论 :
在Java中,我们已经看到了四种不同的方式来对字符串中的字符进行排序。实际上,第二种方法和第三种方法是相同的。您可以使用第三个而不是第二个来支持所有大写和小写字母。您要使用哪种方法取决于您的要求。

Java中按字母顺序对字符串字符进行排序的4种不同方法相关推荐

  1. java中按字母排序_如何在Java中按字母顺序对字符串进行排序

    使用toCharArray()方法 该类的toCharArray()方法将字符串转换为字符数组并返回它. 按字母顺序对字符串值进行排序获取所需的字符串. 使用toCharArray()方法将给定的字符 ...

  2. 在Java中,如何使一个字符串的首字母变为大写

    问题:在Java中,如何使一个字符串的首字母变为大写 我使用Java去获取用户的字符串输入.我尝试使他们输入的第一个字符大写 我尝试这样: String name;BufferedReader br ...

  3. C语言中删除字符串中一个字母,C程序删除字符串中除字母之外的所有字符

    C程序删除字符串中除字母之外的所有字符 在此示例中,您将学习从用户输入的字符串中删除除字母之外的所有字符. 要理解此示例,您应该了解以下C语言编程主题: 删除字符串中除字母之外的字符#include ...

  4. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  5. java中重载 参数顺序_Java方法中的参数太多,第4部分:重载

    java中重载 参数顺序 期望将过多的参数传递给Java方法的问题之一是,该方法的客户端很难确定它们是否以适当的顺序传递了适当的值. 在以前的文章中,我描述了如何使用自定义类型 , 参数对象和构建器来 ...

  6. 在Java中使用标准输入输出设备进行字符串,整数浮点数等 的输入输出操作

    在Java中使用标准输入输出设备进行字符串.整数浮点数等的输入输出操作 在Java语言中进行标准输入输出(键盘显示器)需要通过创建输入输出流对象的方式进行,一般情况下我们可以使用 BufferedRe ...

  7. java中程序执行顺序

    ①在java中执行顺序 一 静态初始化块 二 非静态初始化块 三 构造器 四 父类构造器 ② java中的赋值顺序 一 静态初始化块直接赋值 二 非静态初始化块直接赋值 三 父类继承的属性已赋值 四 ...

  8. Java中如何使用“点”分割字符串呢?

    下文笔者讲述Java代码中使用点分割字符串的方法分享,如下所示: 实现思路: 使用 字符串对象.split("\\.") 使用点分割字符串的示例分享 package com.jav ...

  9. 在 JavaScript 中按字母顺序排序 - 如何在 JS 中按名称排序

    有时您可能有一个单词数组,您希望按字母顺序(从 az 开始)对每个单词进行排序.或者,您可能有一个包含用户信息(包括名称)的对象数组,例如,您希望在其中按用户名称对用户进行排序. 我们可以在 Java ...

最新文章

  1. nfc reader 卡密_红外NFC+50倍变焦,一款被严重低估的王牌?
  2. 【Java 并发编程】线程锁机制 ( 悲观锁 | 乐观锁 | CAS 三大问题 | ABA 问题 | 循环时间长问题 | 多个共享变量原子性问题 )
  3. 如果常数项没有经过显著性检验_Cg,Cgk 能代替偏倚显著性检验?
  4. 【XSS】延长 XSS 生命期
  5. Oracle中如何插入特殊字符: 和 ' (多种解决方案)
  6. wpf资源嵌套,一个资源引用另外一个资源,被引用的资源应该声明在前面
  7. python 内置变量
  8. 电子工业出版社博文视点在2010年系统架构师大会上集锦
  9. Linux系统如何安装oki打印机,涨知识!OKI针式打印机的驱动安装方法
  10. Unity UGUI 流光特效
  11. assimp android build,Windows环境下编译Assimp库生成Android可用的.so文件
  12. 什么叫机械硬盘_企业级机械硬盘和普通机械硬盘有什么区别
  13. Win7系统休眠模式无法唤醒?这招帮你轻松解决问题
  14. easyexcel1.0导出excel测试案例
  15. SheetJS生成/解析Excel
  16. bootstrapTable动态渲染数据获取
  17. 基于北向资金指数择时策略验证与思考
  18. 绿幕抠图直接成像_利用蒙版为事物PS抠出阴影的方法_ps抠图_ps蒙版_课课家
  19. Python模拟搜狗翻译发送请求
  20. Latex中最后一行文献不能对齐

热门文章

  1. Web登录小案例(含验证码登录)
  2. 倍思途享伸缩车载充电器体验:乐享车载快充,让爱车少些凌乱
  3. (转载)人机交互技术发展左右产业趋势
  4. 信息系统项目管理师学习笔记5——信息化与信息系统5
  5. 【Win】KMS 激活命令记录
  6. 苹果浏览器分辨率css,苹果(Safari)浏览器的图片width设置为100%但实际显示为980px改成的问题方法...
  7. solid works 插入两两相交直线确定的基准面作图
  8. Facebook 前端技术栈重构分享
  9. 十二个“一”的演义小故事
  10. 记录:如何解决Ubuntu20.04无法联网问题【亲测有效】