java将字符串转换为字符串数组_java将字符串转化为数组
概述
String 是 Java 中最常用的类型之一。
在本文中,我们将探讨如何将 String 转换为 String 数组 (String[])。
问题介绍
将字符串转换为字符串数组可能有两种情况:
将字符串转换为单例数组(只有一个元素的数组)
按照特定规则将字符串分解为数组的元素
案例 1 比较容易理解。例如,如果我们有一个字符串“java”,我们希望将其转换为 String[]{ “java” }。换句话说,转换后的数组只有一个元素,即输入字符串本身。
对于情况 2,我们需要将输入字符串分成几部分。但是,结果应该如何完全取决于需求。例如,如果我们期望最终数组中的每个元素都包含输入字符串中的两个相邻字符,给定“java”,我们将有 String[]{ “ja”, “va”} .稍后,我们将看到更多示例。
在本文中,我们将把这个字符串作为输入:
String input= "Hi there, I am a java programmer!";
当然,我们将涵盖这两种转换场景。 此外,为简单起见,我们将使用单元测试断言来验证我们的解决方案是否按预期工作。
转换为单例数组
由于输入字符串将是目标数组中的唯一元素,我们可以简单地使用输入字符串初始化数组来解决问题:
@Test
public void testSingletonArray(){
String input= "Hi there, I am a java programmer!";
String[] myArray = new String[] { input};
assertArrayEquals(new String[] { "Hi there, I am a java programmer!" }, myArray);
}
然后,如果我们运行测试,它就会通过。
将输入字符串转换为数组中的元素
现在,让我们看看如何将输入字符串分成段。
- 4.1 使用字符串的 split() 方法
我们经常需要以特定模式处理输入字符串。在这种情况下,我们可以使用正则表达式将输入分解为字符串数组。 Java 的 String 类提供了 split() 方法来完成这项工作。
接下来,我们将根据几个不同的要求将输入示例拆分为一个数组。
首先,假设我们要将输入字符串拆分为字符串数组。为了解决这个问题,我们可以用标点符号分割输入字符串:
@Test
public void testSplitWithSpecialChar(){
String input= "Hi there, I am a java programmer!";
String[] myArray = input.split("[-,.!;?]\\s*" );
assertArrayEquals(new String[] { "Hi there", "I am a java programmer" }, myArray);
}
值得一提的是,当我们需要一个正则表达式的字符类来包含一个破折号时,我们可以把它放在最开始。
上面的测试表明输入字符串在一个数组中被分成两个字符串。
接下来,让我们将同一输入字符串中的所有单词提取到单词数组中。这也是我们在现实世界中可能面临的普遍问题。
为了得到单词数组,我们可以用非单词字符(\W+)分割输入:
@Test
public void testSplitWithWord(){
String input= "Hi there, I am a java programmer!";
String[] myArray = input.split("\\W+");
assertArrayEquals(new String[] { "Hi", "there", "I", "am", "a", "java", "programmer" }, myArray);
}
最后,让我们将输入字符串分解为字符:
@Test
public void testSplitWithChar(){
String input= "Hi there, I am a java programmer!";
String[] myArray = input.split("");
assertArrayEquals(new String[] { "H", "i", " ", "t", "h", "e", "r", "e", ",", " ", "I"," ", "a", "m", " ", "a", " ", "j", "a", "v", "a"," ", "p", "r", "o", "g", "r", "a", "m", "m","e","r", "!" }, myArray);
}
如上面的代码所示,我们使用一个空字符串(零宽度)作为正则表达式。 每个字符,包括输入字符串中的空格,都被提取为目标数组的一个元素。
我们应该注意 String.toCharArray() 也将输入转换为数组。 但是,目标数组是 char 数组 (char[]) 而不是 String 数组 (String[])。
这三个示例使用 String.split() 方法将输入字符串转换为不同的字符串数组。 一些流行的库,例如 Guava 和 Apache Commons,也提供了增强的字符串拆分功能。
- 4.2. 特殊拆分需求
有时我们必须遵循特定规则来拆分输入。 用一个例子来快速说明, 假设我们有这个输入字符串:
String FLIGHT_INPUT = "20221029LH720FRAPEK";
我们期望得到这个数组作为结果:
{ "20221029", "LH720", "FRA", "PEK" }
好吧,乍一看,这个转换逻辑看起来很模糊。 但是,如果我们列出输入字符串的定义,我们就会明白为什么上面的数组是预期的:
[日期][航班号][起飞地][目的地]
- 日期: yyyMMdd; 长度:8
- 航班号; 长度: 变量(不固定)
- 起飞地: 机场代码, 长度:3
- 目的地: 机场代码, 长度:3
正如我们所看到的,有时我们需要按照一个非常特殊的规则来解析输入字符串。 在这种情况下,我们需要分析需求并实现解析器:
@Test
public void testSpecialRule(){
String FLIGHT_INPUT = "20221029LH720FRAPEK";
String dateStr = FLIGHT_INPUT.substring(0, 8);
String flightNo = FLIGHT_INPUT.substring(8, FLIGHT_INPUT.length() - 6);
int airportStart = dateStr.length() + flightNo.length();
String from = FLIGHT_INPUT.substring(airportStart, airportStart + 3);
String to = FLIGHT_INPUT.substring(airportStart + 3);
String[] myArray = new String[] { dateStr, flightNo, from, to };
assertArrayEquals(new String[] { "20221029", "LH720", "FRA", "PEK" }, myArray);
}
如上面的代码所示,我们使用 substring() 方法构建了解析器并正确处理了航班输入。
结论
在本文中,我们学习了如何在 Java 中将 String 转换为 String 数组。
简而言之,将字符串转换为单例数组非常简单。 如果我们需要将给定的字符串分成段,我们可以使用 String.split() 方法。 但是,如果我们需要按照特定规则来分解输入,我们可能需要仔细分析输入格式并实现解析器来解决问题。