在 Java 中按字母顺序对字符串数组进行排序
本篇文章介绍如何在 Java 中按字母顺序对字符串数组进行排序。我们还列出了一些示例代码以帮助你理解该主题。
排序是按特定顺序排列数据。我们可以按升序或降序对整数进行排序,也可以按字典顺序对英文字符或单词进行排序。
字典顺序是单词出现在英语单词字典中时出现的顺序。在本指南中,我们将教你如何在 Java 中对字符串数组进行排序。
我们将本文中的字符串与更小或更大的词进行比较。如果一个字符串根据字典顺序首先出现,则该字符串小于另一个字符串。
此外,在字典顺序中,所有大写字母都在小写字母之前;这意味着以 Z
开头的单词将出现在排序数组中以 a
开头的单词之前。
在 Java 中不使用内置方法对字符串数组进行排序
我们将首先尝试在 Java 中实现我们自己的排序方法。我们将创建一个名为 compareStrings()
的方法,它比较两个字符串并告诉我们哪个更小或哪个更大。
接下来,我们将使用 compareStrings()
方法将每个字符串与数组中存在的所有其他字符串进行比较,并将该字符串放置在正确的位置。下面给出了这两种方法的算法。
-
此方法的输入将是两个字符串,它将返回一个整数值。该方法的输出如下。
-
如果
string1
>string2
:返回正整数 -
如果
string1
<string2
:返回负整数 -
如果
string1
==string2
:返回0
-
如果
-
我们将同时循环遍历两个字符串的每个字符并比较它们的 Unicode 值。我们使用内置的
charAt()
方法来获取 Unicode 值。这些值允许我们将字符作为普通整数进行比较。 - 如果两个字符的 Unicode 值相同,我们将移至每个字符串的下一个字符。
- 如果 Unicode 值不同,那么我们返回值的差异。
- 当我们用完任一字符串中的字符时,循环结束。
-
如果两个字符串在循环外有不同的长度,那么我们返回这个差值。我们这样做是因为较小字符串的所有字符都可能出现在较长字符串的开头。例如,
app
和application
。在这种情况下,较长的字符串将在较小的字符串之后。 -
如果字符串长度相同,我们将简单地返回
0
,表示两个字符串是相同的。
使用 Java 中的 stringArraySort()
方法对字符串数组进行排序
此方法将字符串数组作为输入并返回排序后的数组。在这里,我们将有两个循环,一个嵌套在另一个循环中。它们用于将数组的每个元素与所有剩余元素进行比较。
我们使用 compareString()
方法对循环内的每对元素进行比较。如果第一个字符串比另一个更大,我们交换它们的位置。
完整的代码如下所示。
public class Main
{
public static int compareStrings(String word1, String word2)
{
for(int i = 0; i < Math.min(word1.length(), word2.length()); i++)
{
if((int)word1.charAt(i) != (int)word2.charAt(i))//comparing unicode values
return (int)word1.charAt(i) - (int)word2.charAt(i);
}
if(word1.length() != word2.length())//smaller word is occurs at the beginning of the larger word
return word1.length() - word2.length();
else
return 0;
}
public static String[] stringArraySort(String[] words)
{
for(int i = 0; i < words.length - 1; i++)
{
for(int j = i+1; j < words.length; j++)
{
if(compareStrings(words[i], words[j]) > 0)//words[i] is greater than words[j]
{
String temp = words[i];
words[i] = words[j];
words[j] = temp;
}
}
}
return words;
}
public static void main(String[] args)
{
String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
String[] sortedArr = stringArraySort(arrToSort);
for(int i = 0; i < sortedArr.length; i++)
System.out.print(sortedArr[i] + " ");
}
}
输出:
Blueberry Strawberry apple bananas oranges
使用 Java 中的 compareTo()
方法对字符串数组进行排序
在上面的代码中,我们编写了一个方法来比较两个字符串并返回一个整数值来表示如果它们出现在字典中,哪个字符串将首先出现。
Java 为我们提供了一个名为 compareTo()
的内置方法,它可以为我们完成这项工作。此方法的语法如下所示。
string1.compareTo(string2)
此方法的输出类似于我们之前定义的 compareStrings()
方法。
-
如果
string1
>string2
:返回正整数 -
如果
string1
<string2
:返回负整数 -
如果
string1
==string2
:返回 0
以下代码演示了 compareTo()
方法如何在 Java 中工作。
public class Main
{
public static void main(String[] args)
{
System.out.println("apple".compareTo("orange"));// apple < orange
System.out.println("AAA".compareTo("aaa"));// AAA < aaa
System.out.println("ZZZ".compareTo("aaa"));// ZZZ < aaa
System.out.println("zzz".compareTo("aaa"));// zzz > aaa
System.out.println("strawberry".compareTo("strawberry"));// strawberry == strawberry
}
}
输出:
-14
-32
-7
25
0
我们可以使用 compareTo()
方法对数组进行排序。这个程序将与上面的前一个程序非常相似。唯一的区别是我们将使用 compareTo()
方法而不是我们之前定义的 compareStrings()
方法。
public class Main
{
public static String[] stringArraySort(String[] words)
{
for(int i = 0; i < words.length - 1; i++)
{
for(int j = i+1; j < words.length; j++)
{
if(words[i].compareTo(words[j]) > 0)//words[i] is greater than words[j]
{
String temp = words[i];
words[i] = words[j];
words[j] = temp;
}
}
}
return words;
}
public static void main(String[] args)
{
String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
String[] sortedArr = stringArraySort(arrToSort);
for(int i = 0; i < sortedArr.length; i++)
System.out.print(sortedArr[i] + " ");
}
}
输出:
Blueberry Strawberry apple bananas oranges
使用 Java 中的 Arrays.sort()
方法对字符串数组进行排序
还有一种更简单的数组排序方法。我们可以使用 Arrays
类的 sort()
方法来做到这一点。此方法的语法如下所示。
Arrays.sort(stringArray)
默认情况下,它将按自然顺序(按字典顺序)对数组进行排序。但是,我们可以通过指定不同的比较器来更改此顺序。
比较器是一种用于比较两个对象并告诉我们哪个比另一个更小或更大的方法。sort()
方法使用 Quicksort
算法,时间复杂度为 O(n*log(n))
。
以下代码显示了 sort()
方法的默认行为。
import java.util.Arrays;
public class Main
{
public static void main(String[] args)
{
String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
Arrays.sort(arrToSort);
for(int i = 0; i < arrToSort.length; i++)
{
System.out.print(arrToSort[i] + " ");
}
}
}
输出:
Blueberry Strawberry apple bananas oranges
在 Java 中按降序对字符串数组进行排序
要按逆自然顺序或降序对数组进行排序,我们可以使用 reverseOrder()
比较器,如下所示。
import java.util.Arrays;
import java.util.Collections;
public class Main
{
public static void main(String[] args)
{
String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
Arrays.sort(arrToSort, Collections.reverseOrder());
for(int i = 0; i < arrToSort.length; i++)
{
System.out.print(arrToSort[i] + " ");
}
}
}
输出:
oranges bananas apple Strawberry Blueberry
通过忽略 Java 中的大小写对字符串数组进行排序
要按字母顺序设置字符串数组但忽略字符的大小写,请使用下面的代码示例。
import java.util.Arrays;
public class Main
{
public static void main(String[] args)
{
String[] arrToSort = {"apple", "oranges", "bananas", "Strawberry", "Blueberry"};
Arrays.sort(arrToSort, String.CASE_INSENSITIVE_ORDER);//case insensitive sort
for(int i = 0; i < arrToSort.length; i++)
{
System.out.print(arrToSort[i] + " ");
}
}
}
输出:
apple bananas Blueberry oranges Strawberry
在 Java 中按字母顺序对字符串数组进行排序
排序是以特定顺序排列元素。我们可以按字母顺序或字典顺序对字符串数组进行排序。Java 有一个内置的 compareTo()
方法,可用于比较两个字符串并判断哪个大于另一个。我们可以使用这种方法来编写我们的排序算法。
Java 也有 Arrays.sort()
方法,它可以对字符串数组进行排序。我们可以为我们的 sort()
方法使用不同的比较器以不同的方式设置数组顺序。
相关文章
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
仅在 MySQL 中按日期对日期时间列进行分组
发布时间:2023/05/09 浏览次数:75 分类:MySQL
-
本篇文章使用 GROUP BY 子句、COUNT() 和 DATE() 函数仅在 MySQL 中按 DATE 对 DATETIME 类型列进行分组。
在 MySQL 中插入多个表
发布时间:2023/05/09 浏览次数:133 分类:MySQL
-
本篇文章将介绍在 MySQL 中插入多个表的事务和存储过程。在 MySQL 中插入多个表 无法将单个MySQL命令插入到多个表中,但是我们可以使用MySQL事务来满足项目需求。
在 Ubuntu 中重置 MySQL root 密码
发布时间:2023/05/09 浏览次数:70 分类:MySQL
-
本篇文章介绍了我们需要在 Ubuntu 中重置 MySQL root 密码的两种情况。 第一,当我们忘记了root密码,想要重新设置; 其次,当我们无法使用 mysql_secure_installation 设置 root 密码时。
在 MySQL 中计算百分比
发布时间:2023/05/09 浏览次数:131 分类:MySQL
-
我们将使用一个或多个列来计算 MySQL 中的百分比。 有不同的方法可以做到这一点,对于每种方法,我们都将使用一个示例表。在 MySQL 中使用一列来计算百分比