java将字符串转换为字符串数组_java将字符串转化为数组

createh51个月前 (02-10)技术教程13

概述

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() 方法。 但是,如果我们需要按照特定规则来分解输入,我们可能需要仔细分析输入格式并实现解析器来解决问题。

相关文章

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型:Map map = new HashMap(); // 添加一些键值对 map.put("key...

Java 中 String类你知道多少?_java的string类

Java 中的 String 类是一个非常重要的类,它代表了字符串对象。在 Java 应用程序中,String 类用于存储和操作文本字符串。下面是对 Java String 类的理解分析:String...

100个Java工具类之12:JSON、JSON字符串和对象三者互转

该系列为java工具类系列,主要展示100个常用的java工具类。本系列工具类的核心目的主要有三点:1,以便他用:提供可用的Java工具类,方便大家使用,避免重复造轮子2,个人记录:作为个人记录,同时...

Java,字符串编码,ASCII、GBK、Unicode、UTF-8、UTF-16和UTF-32

字符串编码ASCII和非ASCIIASCII,American Standard Code for Information Interchange(美国信息交换标准代码),是基于拉丁字母的,主要用于显...

Java中怎样将bytes转换为long类型?

  在Java中将字节数组(bytes)转换为long类型,可以使用Java的ByteBuffer类来实现。ByteBuffer类提供了一种方便的方式来处理原始数据类型的字节序列。  以下笔者用具体的...

Emacs折腾日记(六)——elisp字符与字符串类型

本文相关的知识点主要来自 elisp 简明教程 后续内容可以直接查看这个教程上一节我们了解了elisp中基础数据类型之一的数字类型,相比于C/C++ 来说elisp的数字类型更少,学习起来可能也更加简...