【问题标题】:Check if String contains words that are set in an array android studio [duplicate]检查字符串是否包含在数组android studio中设置的单词[重复]
【发布时间】:2017-05-20 09:24:45
【问题描述】:

我试图通过检查字符串是否包含在数组中设置的特殊单词来检查字符串是否有效

String email = "this@webmaster";
    tv.setText(Boolean.toString(checkEmailValidity(email)));

}

public boolean checkEmailValidity(String email) {

    String[] specialWords = {"webmaster", "government"};
    if( email.contains(specialWords.toString())||email.contains(" ")){
        return false;
    }
    return true;
}

结果始终为真,因此使用 specialWords 检查电子邮件的语句不好。我能做什么?

【问题讨论】:

  • "this@webmaster" 本身有 "webmaster",所以它返回 true,你期望什么?
  • 如果电子邮件包含特殊词之一,我希望它返回 false。我发现了逻辑错误,谢谢,因为我需要插入!在 email.contains(specialWords.toString()) 前面。谢谢你的解释
  • 来自thispublic static boolean stringContainsItemFromList(String inputStr, String[] items) { return Arrays.stream(items).parallel().anyMatch(inputStr::contains); }

标签: java android arrays string


【解决方案1】:

如果你使用的是 java 8,你可以这样做

return Arrays.stream(specialwords).parallel().anyMatch(email::contains);

【讨论】:

  • parallel() 对于这样的事情来说太过分了。
  • 还要注意当contains()返回true时OP返回false,所以你需要使用noneMatch()来代替。
  • 是的。我同意并行是一种矫枉过正。
  • @Andreas 不要告诉,他只是从这里复制了答案:Test if a string contains any of the strings from an array
【解决方案2】:
Pattern regex = Pattern.compile("\\b(?:webmaster|government)\\b");
Matcher regexMatcher = regex.matcher(email);
boolean contains = regexMatcher.find();

【讨论】:

    【解决方案3】:

    试试这个:

    public static boolean checkEmailValidity(String email) {
            String[] specialWords = {"webmaster", "government"};
            Set<String> set = new HashSet<String>(Arrays.asList(specialWords));
        return set.contains(email);
        }
    

    这是给你的代码:

    public static boolean checkEmailValidity(String email) {
            String[] specialWords = {"webmaster", "government"};
            boolean flag = false;
            if (!email.contains(" ")) {
                for (int index = 0; index < specialWords.length; index++) {
                    if (email.contains(specialWords[index].toString())) {
                        flag = false;
                        break;
                    } else {
                        flag = true;
                    }
                }
            }
            return flag;
        }
    

    【讨论】:

      【解决方案4】:
      String email = "this@webmaster";
          tv.setText(Boolean.toString(checkEmailValidity(email)));
      
      
      public boolean checkEmailValidity(String email) {
      
          String[] specialWords = {"webmaster", "government"};
          if( email.contains(specialWords.get(0))||email.contains(specialWords.get(1))){
              return false;
          }
          return true;
      }
      

      【讨论】:

      • 特殊词多于2个怎么办?在这种情况下你应该使用forech
      • 就是处理手头的任务,我之前在评论中说过,有一个通用的解决方案。
      猜你喜欢
      • 2012-11-27
      • 2016-12-05
      • 1970-01-01
      • 2014-01-25
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2019-07-24
      相关资源
      最近更新 更多