【问题标题】:Check if String is contains substring separated by spaces检查字符串是否包含由空格分隔的子字符串
【发布时间】:2017-08-23 10:28:55
【问题描述】:

我有两个字符串str,str2。两个字符串都有空格。我使用了 contains 方法,但它不适合这里,因为它只检查确切的字符。此处如何检查一个字符串是否为子字符串。

我已经使用下面的代码实现了它。因此,如果原始字符串中存在字符串“FOO BAR”,则代码中的函数将打印 true。

public static void main(String[] args) {
        String str = "FOO BAR";
        String str1 = "FOO T BAR";
        String orignialString;
        String stringToMatch;
        if (str1.length() > str.length()) {
            orignialString = str1;
            stringToMatch = str;
        } else {
            orignialString = str1;
            stringToMatch = str;
        }
        boolean flag = false;
        String[] stringarr = stringToMatch.split(" ");
        for (int i = 0; i < stringarr.length; i++) {
            if (orignialString.contains(stringarr[i])) {
                flag = true;
            } else {
                flag = false;
                break;
            }
        }
        System.out.println("IS SUBSTRING---> " + flag);            
    }

我正在使用 Pattern Matcher / REGEX 寻找更简洁的短代码。

【问题讨论】:

  • Regexp 不会告诉您一个字符串是否包含在另一个字符串中。它宁愿判断一个字符串是否匹配某个规则。如果您的示例中的 str 是动态更改的,则 regexp 将无济于事,否则它可以。
  • How can I perform a partial match with java.util.regex.*? 前两个答案可能是您正在寻找的?
  • @AnnaP。我浏览了链接。我的要求是检查原始字符串中是否存在子字符串。在链接示例中,它只找到部分字符串

标签: java string


【解决方案1】:

此答案假定您要将 FOO BAR 标识为 FOO T BAR 的子字符串,因为前者的所有单词也作为后者中的单词出现。使用这种逻辑,我们可以从两个字符串中的每一个组成单词列表,然后迭代以检查所有单词是否都存在。

boolean isSub = true;
String str = "FOO T BAR";
String str1 = "FOO BAR";
List<String> strList = Arrays.asList(str.split("\\s+"));
List<String> strSubList = Arrays.asList(str1.split("\\s+"));
for (String sub : strSubList) {
    if (!strList.contains(sub)) {
        isSub = false;
    }
}

System.out.println("input is a substring: " + isSub);

Demo

【讨论】:

  • 您的代码运行与长度无关,并且查看问题陈述,长度起着重要作用。同样,如果我将 str1 作为“FOO TAN BAR”并将 str 作为“FOO BAR”,您的代码将失败。
  • @AnkitaGoyal 我的理解是您的示例案例应该失败,因为FOO BAR 不包含FOO TAN BAR 中的每个单词。
  • @TimBiegeleisen:您的逻辑也是正确的。我认为这里不需要 strList。相反,您可以检查字符串,例如 if (!str.contains(sub))。无需拆分字符串。
  • 但要小心:如果我这样做了,那么父字符串 FOOSTUFF BAR 似乎会包含单词 FOO,而实际上它并没有。
  • 对。错过了!
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 2013-05-18
  • 2011-01-25
  • 2014-09-17
  • 2021-12-20
  • 1970-01-01
  • 2019-08-05
  • 2022-01-17
相关资源
最近更新 更多