Java字符串数组
Java字符串数组用于存储固定数量的字符串。字符串数组在简单的Java程序中非常常见,特别是在初学者使用Java并测试一些特定情景的时候。甚至Java的主方法参数也是一个字符串数组 – public static void main(String[] args)。因此,今天我们将通过示例程序来了解Java字符串数组的不同方面。
- Java String array is basically an array of objects.
- There are two ways to declare string array – declaration without size and declare with size.
- There are two ways to initialize string array – at the time of declaration, populating values after declaration.
- We can do different kind of processing on string array such as iteration, sorting, searching etc.
让我们现在来看一下Java字符串数组的示例程序。
Java字符串数组的声明
在Java中,下面的代码片段展示了字符串数组声明的不同方式。
String[] strArray; //declare without size
String[] strArray1 = new String[3]; //declare with size
请注意,我们也可以将字符串数组写为String strArray[],但上面的方式是标准和推荐的方式。另外,在上面的代码中,strArray是null,而strArray1的值是[null, null, null]。
Java 字符串数组初始化
Java中的字符串数组初始化方式
让我们来看看在Java中初始化字符串数组的不同方式。
//inline initialization
String[] strArray1 = new String[] {"A","B","C"};
String[] strArray2 = {"A","B","C"};
//initialization after declaration
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 +" found at index "+index);
else
System.out.println(s +" not found in the array");
}
}
请注意使用 “break” 关键字,在找到字符串后立即退出循环。
Java字符串数组排序
我们可以实现自己的排序算法,也可以使用Arrays类的排序方法。
String[] vowels = {"a","i","u","e","o"};
System.out.println("Before sorting "+Arrays.toString(vowels));
Arrays.sort(vowels);
System.out.println("After sorting "+Arrays.toString(vowels));
以上代码片段的输出将是:
Before sorting [a, i, u, e, o]
After sorting [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);
//vowelsList.add("x"); //java.lang.UnsupportedOperationException
vowelsList.set(0, "x"); //allowed because no structural modification
System.out.println("vowelsList = "+vowelsList);
这就是关于Java字符串数组的全部内容。参考资料:Arrays Oracle文档