如何在Java中按分隔符分割字符串?

2025年3月25日 | 阅读10分钟

在Java中,分割字符串是一项重要且常用的编码操作。Java提供了多种方法来分割字符串。但最常见的方法是使用String类的split()方法。在本节中,我们将学习如何在Java中按分隔符分割字符串。此外,我们还将学习其他一些分割字符串的方法,例如使用StringTokenizer类,Scanner.useDelimiter()方法。在开始讨论主题之前,让我们先了解什么是分隔符。

什么是分隔符?

Java中,分隔符是用于将字符串分割(分隔)成标记的字符。Java允许我们将任何字符定义为分隔符。Java提供了许多字符串分割方法,它们使用空格字符作为分隔符。空格分隔符是Java中的默认分隔符

在开始编写程序之前,让我们先理解字符串的概念。

字符串由两种文本组成,即标记分隔符。标记是有意义的词,而分隔符是分割或分隔标记的字符。让我们通过一个例子来理解它。

要理解Java中的分隔符,我们必须熟悉Java正则表达式。当分隔符用作正则表达式中的特殊字符(如 (.) 和 (|))时,这是必需的。

分隔符示例

字符串:Javatpoint 是学习新技术的好网站。

在上面的字符串中,标记是Javatpoint, is, the, best, website, to, learn, new, technologies,分隔符是两个标记之间的空格

如何在Java中按分隔符分割字符串?

Java提供了以下方法来将字符串分割成标记

使用Scanner.next()方法

这是Scanner类的一个方法。它查找并返回扫描器中的下一个标记。它通过空格分隔符将字符串分割成标记。完整的标记由匹配分隔符模式的输入标识。

语法

如果下一个标记不可用,则抛出NoSuchElementException。如果输入扫描器已关闭,还会抛出IllegalStateException

让我们创建一个程序,该程序使用next()方法分割字符串,该方法使用空格将字符串分割成标记。

SplitStringExample1.java

输出

Javatpoint
is
the
best
website
to
learn
new
technologies

解释

此Java程序演示了如何使用Scanner类将字符串分割成标记。它使用一个句子初始化字符串str。然后,它创建了一个Scanner对象sc,并将字符串str传递给它。它进入一个while循环,使用Scanner类的hasNext()和next()方法遍历字符串中的每个标记。在循环中,使用next()检索并打印每个标记。

使用String.split()方法

String类的split()方法用于根据匹配正则表达式的指定分隔符将字符串分割成String对象数组。例如,考虑以下字符串

上述字符串由逗号分隔。我们可以使用以下表达式分割上述字符串

上述表达式在分隔符字符逗号(,)分隔标记时将字符串分割成标记。指定的字符串被分割成以下字符串对象

split()方法有两种变体

  • split(String regex)
  • split(String regex, int limit)

String.split(String regex)

它根据指定的正则表达式regex分割字符串。我们可以使用点(.)、空格( )、逗号(,)和任何字符(如z、a、g、l等)。

该方法在使用给定的正则表达式(regex)分割字符串后生成一个字符串数组。数组中的每个条目都是原始字符串的子字符串,按正则表达式模式的出现次数进行分割。

语法

该方法将分隔符正则表达式解析为参数。它返回一个String对象数组。如果解析的正则表达式语法无效,则抛出PatternSyntaxException

让我们使用split()方法,并按逗号分割字符串。

SplitStringExample2.java

输出

Life
is
your
creation

解释

该Java程序展示了如何使用split()函数将字符串分割成标记。首先,定义一个包含单词“Life,is,your,creation”的字符串。然后,在使用split()函数时,将此字符串作为参数传递,并传入分隔符。这会在字符串中任何出现逗号的地方将其分割,从而创建一个子字符串数组。然后,程序使用for循环遍历此数组,并在过程中将每个标记(子字符串)打印到控制台。

让我们看另一个使用多个分隔符分割字符串的例子。

SplitStringExample3.java

输出

If
you
don
t
like
something
change
it

解释

此Java程序展示了如何使用带有多个分隔符的split()方法将字符串分割成标记。首先,定义一个包含文本“If you don't like something, change.it.”的字符串。然后,在调用此字符串的split()方法时,将正则表达式模式“[,. ']+”作为参数传递。根据此模式,字符串将在出现一个或多个字符(,、.或')的地方被分割。字符串数组包含生成的子字符串。然后,程序使用for循环遍历此数组,并在过程中将每个标记(子字符串)打印到控制台。

String.split(String regex, int limit)

它允许我们使用指定的分隔符分割字符串,但分割成有限数量的标记。该方法接受两个参数:regex(分隔符正则表达式)和limit。limit参数用于控制模式应用的次数,从而影响结果数组。它返回通过根据limit参数分割给定字符串而计算出的String对象数组。

split()方法变体之间有一个细微差别,即调用该方法后,它会限制返回的标记数量。

语法

如果解析的正则表达式语法无效,则抛出PatternSyntaxException

limit参数可以是正数、负数或等于limit。

SplitStringExample4.java

输出

When the limit is positive:
Number of tokens: 2
46
-567-7388

When the limit is negative: 
Number of tokens: 2
Life,is,
our,creation

When the limit is equal to 0:
Number of tokens: 2
Hello
how are you?

解释

此Java程序使用多个limit设置来演示split()方法的各种场景。初始化了三个字符串str1、str2和str3,它们具有不同的内容。接下来,它展示了如何使用不同的limit值和分隔符分割每个文本。在第一个场景中,str1以limit为2进行分割;在第二个场景中,str2以limit为-1进行分割;在第三个场景中,str3以limit为0进行分割。它显示了为每个示例生成的标记总数以及实际的标记。

管道分隔字符串示例

分割管道(|)分隔的字符串有点棘手。因为管道是Java正则表达式中的一个特殊字符。

在Java中,管道字符("|")在正则表达式中是一个特殊字符,通常用于表示替代。因此,在分割管道分隔的字符串时,需要使用反斜杠("\\")转义管道字符,将其视为字面字符而不是正则表达式特殊字符。

让我们创建一个由管道分隔的字符串,并用管道分割它。

SplitStringExample5.java

输出

L
i
f
e
|
i
s
|
y
o
u
r
|
c
r
e
a
t
i
o
n

解释

在上面的示例中,我们看到它没有产生与其他分隔符相同的输出。它应该生成标记数组life, yours,creation,但实际上并没有。它给出了输出中看到的那个结果。

原因是正则表达式引擎将管道分隔符解释为逻辑或运算符。regex引擎在空字符串上分割字符串。

为了解决这个问题,我们必须在将管道字符传递给split()方法时转义它。我们使用以下语句来转义管道字符

在分隔符前添加一对反斜杠(\\)以转义管道。对上述程序进行更改后,regex引擎将管道字符解释为分隔符。

转义管道字符的另一种方法是将管道字符放在一对方括号内,如下所示。在Java regex API中,方括号对充当字符类。

上述两条语句都产生以下输出

输出

Life
is
your
creation

使用StringTokenizer类

Java的StringTokenizer是java.util包中定义的旧类。它允许我们将字符串分割成标记。程序员不使用它,因为String类的split()方法可以完成相同的工作。因此,程序员更喜欢split()方法而不是StringTokenizer类。我们使用该类的以下两种方法

StringTokenizer.hasMoreTokens()

该方法遍历字符串并检查分词器字符串中是否还有更多标记。如果当前位置之后字符串中有一个可用标记,则返回true,否则返回false。如果返回true,它会在内部调用nextToken()方法,而nextToken()方法返回标记。

语法

StringTokenizer.nextToken()

它从字符串分词器返回下一个标记。如果字符串分词器中没有可用标记,则抛出NoSuchElementException

语法

让我们创建一个程序,该程序使用StringTokenizer类分割字符串。

SplitStringExample6.java

输出

Welcome
to
Javatpoint

解释

此Java程序展示了如何使用StringTokenizer类将字符串分割成标记。首先,定义一个包含文本“Welcome/to/Javatpoint”的字符串str。然后,将字符串str和分隔符“/”传递给构造函数,以创建一个StringTokenizer对象token。使用hasMoreTokens()函数检查是否有更多可用标记,并使用nextToken()方法提取每个标记,它进入一个while循环,遍历字符串中的每个标记。

使用Scanner.useDelimiter()方法

Java的Scanner类提供了useDelimiter()方法来将字符串分割成标记。useDelimiter()方法有两种变体

  • useDelimiter(Pattern pattern)
  • useDelimiter(String pattern)

useDelimiter(Pattern pattern)

该方法将扫描程序的分隔符模式设置为指定的字符串。它将分隔符模式解析为参数。它返回Scanner。

语法

useDelimiter(String pattern)

该方法将扫描程序的分隔符模式设置为从指定字符串构建的模式。它将分隔符模式解析为参数。它返回Scanner。

语法

注意:以上两种方法行为相同,都调用useDelimiter(Pattern.compile(pattern))。

在下面的程序中,我们使用了useDelimiter()方法来分割字符串。

SplitStringExample7.java

输出

Do
your
work
self

解释

此Java程序演示了如何使用带有自定义分隔符的Scanner类将字符串分割成标记。第一步是使用字符串“Do/your/work/self”创建一个Scanner对象scan。然后,它使用useDelimiter()方法将分隔符设置为“/”。使用hasNext()函数检查是否有更多可用标记,并使用next()方法获取每个标记,它进入一个while循环,遍历字符串中的每个标记。在循环中,每个标记都会被打印到控制台。