深入理解Java字符串数组:创建、操作与最佳实践
这是文章《Java字符串数组》的第1部分(共1部分)。
内容片段: Java字符串数组用于存储固定数量的字符串。字符串数组在简单的Java程序中非常常见,特别是在初学者使用Java并测试一些特定情景的时候。甚至Java的主方法参数也是一个字符串数组 – public static void main(String[] args)。因此,今天我们将通过示例程序来了解Java字符串数组的不同方面。
- Java字符串数组基本上是一个对象数组。
- 声明字符串数组有两种方式 – 不指定大小的声明和指定大小的声明。
- 初始化字符串数组有两种方式 – 在声明时初始化和在声明后填充值。
- 我们可以对字符串数组进行不同类型的处理,如迭代、排序、搜索等。
让我们现在来看一下Java字符串数组的示例程序。
Java字符串数组的声明
在Java中,下面的代码片段展示了字符串数组声明的不同方式。
String[] strArray; //不指定大小声明
String[] strArray1 = new String[3]; //指定大小声明
请注意,我们也可以将字符串数组写为String strArray[],但上面的方式是标准和推荐的方式。另外,在上面的代码中,strArray是null,而strArray1的值是[null, null, null]。
Java 字符串数组初始化
Java中的字符串数组初始化方式
让我们来看看在Java中初始化字符串数组的不同方式。
//内联初始化
String[] strArray1 = new String[] {"A","B","C"};
String[] strArray2 = {"A","B","C"};
//声明后初始化
String[] strArray3 = new String[3];
strArray3[0] = "A";
strArray3[1] = "B";
strArray3[2] = "C";
所有三个字符串数组的值都是相同的。然而,如果您在它们上调用equals方法,它将返回false。
System.out.println(strArray1.equals(strArray2)); // false
System.out.println(Arrays.toString(strArray1).equals(Arrays.toString(strArray2)));// true
原因是数组是对象,而对象类实现了以下的equals()方法。
public boolean equals(Object obj) {
return (this == obj);
}
第二个陈述是正确的,因为当转换为字符串时,它们的值是相同的,而String类的equals()方法实现会检查值。如需详细信息,请参阅String类的API文档。
遍历Java字符串数组
我们可以使用java的for循环或者java的foreach循环来遍历字符串数组。
String[] strArray2 = {"A","B","C"};
for (int i = 0; i < strArray2.length; i++) {
System.out.print(strArray2[i]);
}
for (String str : strArray2) {
System.out.print(str);
}
在字符串数组中查找一个字符串。
我们可以使用for循环在数组中搜索字符串,下面是一个简单的示例。
package com.Olivia.stringarray;
public class JavaStringArrayExample {
public static void main(String[] args) {
String[] strArray = { "A", "B", "C" };
boolean found = false;
int index = 0;
String s = "B";
for (int i = 0; i < strArray.length; i++) {
if(s.equals(strArray[i])) {
index = i; found = true; break;
}
}
if(found)
System.out.println(s +" 在索引 "+index+" 处找到");
else
System.out.println(s +" 在数组中未找到");
}
}
请注意使用 “break” 关键字,在找到字符串后立即退出循环。
Java字符串数组排序
我们可以实现自己的排序算法,也可以使用Arrays类的排序方法。
String[] vowels = {"a","i","u","e","o"};
System.out.println("排序前 "+Arrays.toString(vowels));
Arrays.sort(vowels);
System.out.println("排序后 "+Arrays.toString(vowels));
以上代码片段的输出将是:
排序前 [a, i, u, e, o]
排序后 [a, e, i, o, u]
请注意,String实现了Comparable接口,因此可以进行自然排序。如果您想按其他方式排序,可以通过传递Comparator来使用Arrays.sort()重载方法。在Java中学习有关这些排序技巧,请查阅Comparable和Comparator。
将字符串转换为字符串数组。
我们可以使用split()方法将String转换为字符串数组。当您输入一个单独的字符串,并且值是用分隔符字符分隔的时候,这个方法非常有用。
String str = "a,e,i,o,u";
String[] vowels = str.split(",");
System.out.println(Arrays.toString(vowels)); //[a, e, i, o, u]
将字符串数组转换为字符串。
我们可以使用Arrays.toString()方法将String数组转换为String。请注意,数组没有实现toString()方法,所以如果你想获得它的字符串表示,就必须依赖于Arrays类,或者编写自己的自定义代码。
String[] vowels = { "a", "e", "i", "o", "u" };
System.out.println(vowels);
System.out.println(Arrays.toString(vowels));
输出将如下所示。
[Ljava.lang.String;@3d04a311
[a, e, i, o, u]
第一个输出是由于Object类的toString()方法实现如下。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Java中将String数组转换为List
将Java中的String数组转换为List
我们可以使用Arrays.toList()方法将字符串数组表示为列表。注意,这个列表由数组支持,任何结构上的修改都会导致java.lang.UnsupportedOperationException。
String[] vowels = { "a", "e", "i", "o", "u", "a", "o" };
List<String> vowelsList = Arrays.asList(vowels);
System.out.println("元音列表 = "+vowelsList);
//vowelsList.add("x"); //java.lang.UnsupportedOperationException
vowelsList.set(0, "x"); //允许,因为没有结构性修改
System.out.println("元音列表 = "+vowelsList);
这就是关于Java字符串数组的全部内容。参考资料:Arrays Oracle文档