深入理解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文档

bannerAds