Check if a String Ends with a Certain Pattern in Java – 在Java中检查一个字符串是否以某种模式结束

最后修改: 2022年 1月 8日

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

1. Overview

1.概述

In this short tutorial, we’re going to cover in-depth how to check if a string ends with a certain pattern in Java.

在这个简短的教程中,我们将深入介绍如何在Java中检查一个字符串是否以某种模式结束

First, we’ll start by considering solutions using core Java. Then, we’re going to showcase how to accomplish the same thing using external libraries.

首先,我们将开始考虑使用核心Java的解决方案。然后,我们将展示如何使用外部库来完成同样的事情。

2. Using the String Class

2.使用String

Simply put, String provides multiple convenient options to verify if a given string ends with a particular substring.

简单地说,String提供了多种方便的选项来验证一个给定的字符串是否以特定的子串结束。

Let’s take a closer look at each option.

让我们仔细看看每个选项。

2.1. String#endsWith Method

2.1.String#endsWith方法

This method is introduced typically for this purpose. It offers the most straightforward way to check if a String object ends with another string.

这个方法的引入通常是为了这个目的。它提供了最直接的方法来检查一个String对象是否以另一个字符串结束

So, let’s see it in action:

因此,让我们看看它的行动。

public static boolean usingStringEndsWithMethod(String text, String suffix) {
    if (text == null || suffix == null) {
        return false;
    }
    return text.endsWith(suffix);
}

Please note that endsWith is not null-safe. So, we need first to make sure that text and suffix are not null to avoid NullPointerException.

请注意,endsWith不是空的。因此,我们首先需要确保textsuffix不是null,以避免NullPointerException

2.2. String#matches Method

2.2.String#matches 方法

matches is another great method that we can use to achieve our objective. It simply checks whether or not a string matches a given regular expression.

matches 是另一个伟大的方法,我们可以用它来实现我们的目标。它简单地检查一个字符串是否与给定的regular expression相匹配。

Basically, all we need to do is specify the regex that works properly for our use case:

基本上,我们需要做的就是指定对我们的用例正常工作的重码。

public static boolean usingStringMatchesMethod(String text, String suffix) {
    if (text == null || suffix == null) {
        return false;
    }
    String regex = ".*" + suffix + "$";
    return text.matches(regex);
}

As we can see, we used a regular expression that matches suffix at the end ($) of our string text. Then, we passed the regex to the matches method.

正如我们所看到的,我们使用了一个正则表达式来匹配我们的字符串suffix的末尾($)的text。然后,我们将正则表达式传递给matches方法。

2.3. String#regionMatches Method

2.3.String#regionMatches方法

Similarly, we can use regionMatches method to address our central question. It returns true if a string part matches exactly the specified string, and it returns false otherwise.

同样地,我们可以使用regionMatches方法来解决我们的中心问题。如果一个字符串部分与指定的字符串完全匹配,它返回true,否则返回false

Now, let’s illustrate this with an example:

现在,让我们用一个例子来说明这一点。

public static boolean usingStringRegionMatchesMethod(String text, String suffix) {
    if (text == null || suffix == null) {
        return false;
    }
    int toffset = text.length() - suffix.length();
    return text.regionMatches(toffset, suffix, 0, suffix.length());
}

toffset denotes the starting offset of the subregion in our string. So, in order to check if text ends with the specified suffix, toffset should be equal to the length of text minus the length of suffix.

toffset表示我们字符串中子区域的起始偏移量。因此,为了检查text是否以指定的suffix结束,toffset应该等于text的长度减去suffix的长度。

3. Using the Pattern Class

3.使用Pattern

Alternatively, we can use the Pattern class to compile a regular expression that checks if a string ends with a pattern.

另外,我们可以使用Pattern类来编译一个正则表达式,检查一个字符串是否以某个模式结尾.

Without further ado, let’s reuse the same regex we specified in the previous section:

不多说了,让我们重新使用我们在上一节中指定的相同的铰链。

public static boolean usingPatternClass(String text, String suffix) {
    if (text == null || suffix == null) {
        return false;
    }
    Pattern pattern = Pattern.compile(".*" + suffix + "$");
    return pattern.matcher(text).find();
}

As shown above, Pattern compiles the previous regex, which denotes the end of a string, and attempts to match it against our string text.

如上所示,Pattern编译了前面的表示字符串结尾的regex,并试图将其与我们的字符串text进行匹配。

4. Using Apache Commons Lang

4.使用Apache Commons Lang

Apache Commons Lang provides a set of ready-to-use utility classes for string manipulation. Among these classes, we find StringUtils.

Apache Commons Lang提供了一组用于字符串操作的即用型实用类。在这些类中,我们发现StringUtils

This utility class comes with an interesting method called endsWith. It checks if a sequence of characters ends with a suffix in a null-safe manner.

这个实用类有一个有趣的方法,叫做endsWith。以无效安全的方式检查一个字符序列是否以一个后缀结束

Now, let’s exemplify the use of the StringUtils.endsWith method:

现在,让我们举例说明StringUtils.endsWith方法的使用。

public static boolean usingApacheCommonsLang(String text, String suffix) {
    return StringUtils.endsWith(text, suffix);
}

5. Conclusion

5.总结

In this article, we’ve explored different ways to check if a string ends with a particular pattern.

在这篇文章中,我们已经探讨了检查一个字符串是否以特定模式结尾的不同方法。

First, we saw a couple of ways to achieve this using built-in Java classes. Then, we explained how to do the same thing using the Apache Commons Lang library.

首先,我们看到了使用内置的Java类来实现这一目标的几种方法。然后,我们解释了如何使用Apache Commons Lang库来做同样的事情。

As always, the code used in this article can be found over on GitHub.

一如既往,本文中所使用的代码可以在GitHub上找到over