Java字符串数组

时间:2020-02-23 14:36:54  来源:igfitidea点击:

Java String数组用于保存固定数量的String。
字符串数组在简单的Java程序中非常常见,特别是在Java和测试某些特定情况下。
甚至java main方法的参数也是字符串数组–公共静态无效值main(String [] args)。
因此,今天我们将通过示例程序研究Java字符串数组的不同方面。

  • Java String数组基本上是对象的数组。

  • 声明字符串数组的方法有两种:不声明大小和声明大小。

  • 初始化字符串数组有两种方法-在声明时,在声明后填充值。

  • 我们可以对字符串数组进行不同类型的处理,例如迭代,排序,搜索等。

现在让我们来看一下Java字符串数组示例程序。

Java字符串数组声明

下面的代码片段显示了Java中字符串数组声明的不同方法。

String[] strArray; //declare without size

String[] strArray1 = new String[3]; //declare with size

请注意,我们也可以将字符串数组写为String strArray [],但以上所示的方法是标准和推荐的方法。
同样在上面的代码中,strArraynull,而strArray1的值为[null,null,null]

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

原因是数组是Objects,而Object类实现了equals()方法,如下所示。

public boolean equals(Object obj) {
      return (this == obj);
  }

第二条语句是正确的,因为当转换为String时,它们的值是相同的,并且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.theitroad.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字符串数组

我们可以使用" 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);