Java 中的 StringTokenizer

2024年10月26日 | 阅读 7 分钟

java.util.StringTokenizer 类允许您将字符串分解成标记。它是一种简单的分割字符串的方法。它是一个 Java 的遗留类。

它不像 StreamTokenizer 类那样提供区分数字、带引号的字符串、标识符等的设施。我们将在 I/O 章节讨论 StreamTokenizer 类。

在 StringTokenizer 类中,可以在创建时提供分隔符,或者逐个提供给标记。

StringTokenizer in Java

StringTokenizer 类的构造函数

StringTokenizer 类中有三个构造函数。

构造函数描述
StringTokenizer(String str)它使用指定的字符串创建 StringTokenizer。
StringTokenizer(String str, String delim)它使用指定的字符串和分隔符创建 StringTokenizer。
StringTokenizer(String str, String delim, boolean returnValue)它使用指定的字符串、分隔符和 returnValue 创建 StringTokenizer。如果 returnValue 为 true,则分隔符字符被视为标记。如果为 false,则分隔符字符用于分隔标记。

Java 中的 **StringTokenizer** 是一个用于将字符串分解为标记的类。它是 **java.util** 包的一部分,并提供了一种基于指定分隔符对字符串进行标记的简单方法。该类提供了几个构造函数,允许我们指定不同的分隔符或是否将分隔符包含为标记。创建 **StringTokenizer** 对象后,我们可以使用其方法来迭代标记或单独检索它们。

要创建 **StringTokenizer**,通常将要标记的字符串和分隔符传递给构造函数。默认分隔符是空格字符,但您可以指定任何一组字符作为分隔符。例如,要基于逗号对字符串进行标记,您可以创建一个 **StringTokenizer**。

**StringTokenizer** 还提供了一个 **countTokens()** 方法来获取剩余标记的总数。如果您需要在迭代标记之前知道标记的数量,这会很有用。

需要注意的是,**StringTokenizer** 是一个遗留类,并且不鼓励使用它,而推荐使用 **String** 类的 **split()** 方法或 **Scanner** 类来进行更复杂的标记。对于简单的标记任务,**split()** 方法更灵活且易于使用,而 **Scanner** 类提供了更高级的标记功能,例如解析不同类型的数据。

StringTokenizer 类的优点

  • 它提供了一种简单的方法,可以在不进行复杂逻辑的情况下基于指定的分隔符对字符串进行标记。这使得它易于用于简单的标记任务,您只需要将字符串拆分成部分。
  • 另一个优点是它能够包含或排除分隔符作为标记。在某些需要单独处理标记和分隔符的情况下,这可能很有用。例如,如果我们正在解析数学表达式,我们可能希望在标记表达式的同时还要跟踪运算符。
  • **StringTokenizer** 在内存使用方面也很高效。它不会创建输入字符串或标记的其他副本,这在处理大型字符串或内存是问题时可能很有益。
  • 此外,**StringTokenizer** 是标准 Java API 的一部分,因此它广泛可用并得到支持。这意味着我们可以在 Java 应用程序中使用它,而无需添加任何外部库或依赖项。

StringTokenizer 类的缺点

  • 在 Java 中使用 **StringTokenizer** 的一个缺点是其功能与其他标记方法相比有限。
  • **StringTokenizer** 一次只能基于一个分隔符进行标记,这对于更复杂的标记需求可能很严格。例如,如果我们需要基于多个分隔符或更复杂的模式对字符串进行标记,我们将需要使用不同的方法。
  • 另一个缺点是 **StringTokenizer** 是一个遗留类,这意味着不建议在新代码中使用它。
  • **StringTokenizer** 类在很大程度上已被 **String** 类的 **split()** 方法和 **Scanner** 类取代,后者为标记任务提供了更大的灵活性和功能。因此,使用 **StringTokenizer** 可能会导致代码难以维护且效率低下。
  • 此外,**StringTokenizer** 没有提供一种方法来标记字符串,使其能够轻松地重新构建原始字符串。如果我们需要标记字符串进行处理,但稍后还需要重新构建原始字符串,这可能是一个限制。

总的来说,虽然 **StringTokenizer** 对于简单的标记任务可能很有用,但其限制和遗留状态使其不适合现代 Java 编程中更复杂的标记需求。

StringTokenizer 类的应用

由于 StringTokenizer 能够使用指定的分隔符将字符串分解为标记,因此在 Java 中有多种重要的应用。

  • 一个常见的用途是文本解析和分析,其中从更大的文本主体中提取单个单词或短语至关重要。此功能在自然语言处理任务(如情感分析)中特别有用,其中句子的情感可以通过分析单个单词来确定。
  • 另一个重要的应用是数据处理,尤其是在处理以 CSV(逗号分隔值)文件等分隔格式存储的数据时。
  • StringTokenizer 可用于解析这些文件并提取数据字段,这在数据挖掘、数据验证和数据清理操作中至关重要。
  • 此外,`StringTokenizer` 通常用于网络应用程序中解析传入的消息或命令。例如,在客户端-服务器体系结构中,服务器可能会从客户端接收带有特定分隔符的字符串命令。`StringTokenizer` 可用于解析这些命令并提取必要的信息来执行请求的操作。
  • 此外,`StringTokenizer` 可用于 Web 应用程序中处理 URL 查询字符串。URL 中的查询字符串包含由“&”和“=”等分隔符分隔的参数和值,`StringTokenizer` 可用于提取这些参数和值以供进一步处理。

总而言之,`StringTokenizer` 是 Java 中一个多功能的工具,可在文本处理、数据解析、网络和 Web 开发中使用,使其成为各种编程任务的宝贵实用程序。

StringTokenizer 类的 Methods

Java 中的 `StringTokenizer` 提供了几种方法来操作和访问字符串中的标记。其中一个关键方法是 `hasMoreTokens()`,如果字符串中有更多标记,则返回 `true`,否则返回 `false`。此方法通常在循环中使用以迭代字符串中的所有标记。

`nextToken()` 方法用于从字符串中检索下一个标记。它将下一个标记作为字符串返回,并将分词器前进到下一个标记。此方法通常与 `hasMoreTokens()` 结合使用以迭代字符串中的所有标记。

另一个有用的方法是 `countTokens()`,它返回字符串中剩余的标记数。此方法可用于确定字符串中的标记总数或跟踪标记进度。

`StringTokenizer` 还提供了一个允许您指定自定义分隔符的构造函数。默认情况下,`StringTokenizer` 使用空格作为分隔符,但在创建 `StringTokenizer` 对象时,您可以指定一个包含自定义分隔符的字符串。

StringTokenizer 类有六个有用的方法,如下所示:

StringTokenizer in Java
方法描述
boolean hasMoreTokens()它检查是否还有可用的标记。
String nextToken()它从 StringTokenizer 对象返回下一个标记。
String nextToken(String delim)它根据分隔符返回下一个标记。
boolean hasMoreElements()它与 hasMoreTokens() 方法相同。
Object nextElement()它与 nextToken() 相同,但其返回类型为 Object。
int countTokens()它返回标记的总数。

StringTokenizer 类的示例

让我们看一个 StringTokenizer 类的示例,它根据空格将字符串“my name is khan”分解为标记。

Simple.java

输出

my
name
is
khan

上面的 Java 代码演示了 StringTokenizer 类及其 hasMoreTokens() 和 nextToken() 方法的使用。

StringTokenizer.nextToken(String delim) 方法示例

Test.java

输出

Next token is : my

注意:StringTokenizer 类现在已弃用。建议使用 String 类的 split() 方法或属于 java.util.regex 包的 Pattern 类。

StringTokenizer.hasMoreTokens() 方法示例

此方法如果分词器字符串中有更多标记,则返回 true,否则返回 false。

StringTokenizer1.java

输出

Demonstrating
methods
from
StringTokenizer
class

上面的 Java 程序显示了 StringTokenizer 类的 hasMoreTokens() 和 nextToken() 方法的使用。

StringTokenizer.hasMoreElements() 方法示例

此方法返回的值与 StringTokenizer 类的 hasMoreTokens() 方法相同。唯一的区别是这个类可以实现 Enumeration 接口。

StringTokenizer2.java

输出

Hello
everyone
I
am
a
Java
developer

上面的代码演示了 hasMoreElements() 方法的使用。

StringTokenizer.nextElement() 方法示例

nextElement() 返回分词器字符串中的下一个标记对象。它可以实现 Enumeration 接口。

StringTokenizer3.java

输出

Hello
Everyone
Have
a
nice
day

上面的代码演示了 nextElement() 方法的使用。

StringTokenizer.countTokens() 方法示例

此方法计算分词器字符串中存在的标记数。

StringTokenizer4.java

输出

Total number of Tokens: 6

上面的 Java 代码演示了 StringTokenizer() 类的 countTokens() 方法。