Creating a Java Array from Regular Expression Matches – 从正则表达式匹配中创建一个Java数组

最后修改: 2022年 4月 20日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

In this tutorial, we’ll learn how to create an array from a regular expression (regex) output.

在本教程中,我们将学习如何从正则表达式(regex)输出创建一个数组。

2. Introduction

2.绪论

For our example, let’s parse a long string. We’ll find patterns with 10-digit phone numbers. We’ll then have the output generated as an array.

对于我们的例子,让我们来解析一个长字符串。我们将找到带有10位数电话号码的模式。然后,我们将把输出结果生成一个数组。

Oracle has provided java.util.regex package for its regex implementation. We’ll use the classes available in this package for our demo. Once we find our matches, we’ll take that output and create an array.

Oracle提供了java.util.regex包来实现其regex。我们将在我们的演示中使用这个包中的类。一旦我们找到了我们的匹配,我们就会把这个输出创建一个数组。

Arrays are fixed-size variables. We must declare their size before using them. There is also a chance of memory wastage if arrays are not correctly implemented. For this reason, we start with a List and later convert the List dynamically to an array.

数组是固定大小的变量。我们必须在使用它们之前声明它们的大小。如果数组没有被正确实现,也有可能造成内存浪费。出于这个原因,我们从一个List开始,然后将List动态地转换为数组。

3. Implementation

3.实施

Let’s go through our codes to implement this solution step-by-step. To start, let’s create an ArrayList to store the matches:

让我们通过我们的代码来一步步实现这个解决方案。首先,让我们创建一个ArrayList来存储匹配信息。

List<String> matchesList = new ArrayList<String>();

We’ll store a long string with phone numbers embedded in it as follows:

我们将存储一个嵌入电话号码的长字符串,如下所示。

String stringToSearch =
  "7801111111blahblah  780222222 mumbojumbo7803333333 thisnthat 7804444444";

We use compile() method, a static factory method in the Pattern class. It returns an equivalent Pattern object of regex:

我们使用compile()方法,这是Pattern类中的一个静态工厂方法。它返回一个等同于regex的Pattern对象。

Pattern p1 = Pattern.compile("780{1}\\d{7}");

Once we have a Pattern object, we create a Matcher object using the matcher() method:

一旦我们有了一个Pattern对象,我们就使用matcher()方法创建一个Matcher对象。

Matcher m1 = p1.matcher(stringToSearch); 

Here we can use find() method from the Matcher class, which returns a boolean if a match is found:

在这里,我们可以使用Matcher类中的find()方法,如果找到一个匹配,它将返回一个boolean

while (m1.find()) {
    matchesList.add(m1.group());
}

The group() method we just used is in the Matcher class. It produces a String that represents the matched pattern.

我们刚刚使用的 group()方法是在Matcher类中。它产生一个String,代表匹配的模式。

To convert matchesList to an array, we find the number of items that we matched. Then we use it when we create a new array to store the results:

为了将matchesList转换为数组,我们找到匹配的项目数量。然后我们在创建一个新的数组来存储结果时使用它。

int sizeOfNewArray = matchesList.size(); 
String newArrayOfMatches[] = new String[sizeOfNewArray]; 
matchesList.toArray(newArrayOfMatches);

Let’s now see how our code works with some examples. If we pass a String with four matching patterns, our code produces a new String array with these four matches:

现在让我们通过一些例子来看看我们的代码是如何工作的。如果我们传递一个带有四个匹配模式的String,我们的代码会产生一个带有这四个匹配模式的新String阵列。

RegexMatches rm = new RegexMatches();
String actual[] = rm.regexMatch("7801111211fsdafasdfa  7802222222  sadfsadfsda7803333333 sadfdasfasd 7804444444");

assertArrayEquals(new String[] {"7801111211", "7802222222", "7803333333", "7804444444"}, actual, "success");

If we pass a String with no matches, we get an empty String array:

如果我们传递一个没有匹配的String,我们得到一个空的String数组。

String actual[] = rm.regexMatch("78011111fsdafasdfa  780222222  sadfsadfsda78033333 sadfdasfasd 7804444");

assertArrayEquals(new String[] {}, actual, "success");

4. Conclusion

4.总结

In this tutorial, we learnt how to look for patterns in a string of text in Java. We also found a way to list the outputs in an array.

在本教程中,我们学习了如何在Java中寻找一串文本的模式。我们还找到了一种将输出结果列在数组中的方法。

The source code is available over on GitHub.

源代码可在GitHub上获得