【问题标题】:Checking if a string only contains certain characters检查字符串是否仅包含某些字符
【发布时间】:2014-05-07 04:50:23
【问题描述】:

我有一个字符串,表示由“|”组成的 32 个字符长的条形码和 ”:”。

我想检查任何给定字符串的有效性以确保它是条形码。其中一项测试是检查它包含的唯一符号是上面提到的两个。如何检查?

我首先使用的是分隔符,但我认为这不是解决此问题的正确方法。

public boolean isValidBarCode (String barCode)
{
  barCode.useDelimiter ("[|:]");
  if (barCode.length() == 32)
  {
       return true;
  }         

  else 
  {
      return false;
  }

我知道我需要检查其他事项才能将其验证为条形码,但我只是为了检查给定字符串中的符号而询问。

我是初学者,非常感谢您的帮助!

【问题讨论】:

  • 你知道正则表达式又名regex吗?可能值得研究

标签: java string symbols delimiter


【解决方案1】:

您可以使用正则表达式:

boolean correct = string.matches("[\\:\\|]+");

正则表达式的解释:它检查字符串是否由 1 个或多个字符组成(这就是 + 后缀所做的)是 : 或 |。我们通常会写[:|]+,但由于: 和(我认为)| 是正则表达式中的特殊字符,它们需要用反斜杠转义。并且反斜杠必须在字符串文字中转义,因此是双反斜杠。

或者您可以简单地使用循环编写 5 行算法:

boolean correct = false;
for (int i = 0; i < string.length() && correct; i++) {
    char c = string.charAt(i);
    if (c != ':' && c != '|') {
        correct = false;
    }
}

【讨论】:

    【解决方案2】:

    由于您要求条形码长度正好为 32 个字符,并且仅包含 : 和 |字符,您应该结合使用长度和正则表达式检查:

    boolean isCorrect = barCode.matches( "[\\|\\:]*" );
    if(isCorrect && barCode.length() == 32) {
        //true case
    } else {
        //false case
    }
    

    【讨论】:

      【解决方案3】:
      boolean isBarCode = barCode.matches( "[\\|\\:]*" );
      

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 2016-08-09
        • 2011-03-31
        • 2018-05-01
        • 1970-01-01
        • 2019-12-29
        • 2015-01-31
        • 1970-01-01
        相关资源
        最近更新 更多