【问题标题】:Checking if a specified position in a string contains a letter or a digit检查字符串中的指定位置是否包含字母或数字
【发布时间】:2013-04-30 07:07:48
【问题描述】:

我想检查一个字符串在指定位置是否包含字母或数字。

问题来了:

我有一个长度为 2 的输入字符串。该字符串的格式为 "a1"。 我正在为这些类型的字符串做一个验证方法。

要求:

  • 索引位置 0 处的字母必须是以下字母之一:a、b、c、d、e、f、g、h
  • 索引位置 1 处的数字/数字必须是以下数字之一:1、2、3、4、5、6、7、8

谢谢!

【问题讨论】:

  • 你试过什么方法?
  • 读取字符串,检查第一个字符,然后检查第二个字符。完成。
  • 你试过String.charAt(int)吗?
  • 我尝试了 charAt() 并检查了每个索引位置,但无法检查我想要检查的所有字符/数字。还尝试循环检查。现在是否使用正则表达式方法(.matches())并且结果很完美。

标签: java string contains


【解决方案1】:

正则表达式

input.matches("^[abcdefgh][12345678]$");

编辑:

这相当于:

input.matches("^[a-h][1-8]$");
  • ^ 将匹配检查锚定到输入字符串的开头。
  • [a-h] 表示字符串中的第一个字符(在 ^ 之后)可以是字符 a 到 h 之一。
  • [1-8] 表示第二个字符可以是 1 到 8。
  • $ 表示 [1-8] 之后的下一件事 必须 是字符串的结尾。

【讨论】:

  • 我觉得^[a-h][1-8]$容易多了
  • 您可以使用"^[a-h][1-8]$" 作为模式,不必指定您应该匹配的所有字母或数字
  • @rolfl 你真的希望新手明确列举每个可用的字符吗?我不明白这有多容易。
【解决方案2】:

简单回答:提取第n个字母,判断是数字还是字母:

isaletter(mystring.charAt(0));
isanumber(mystring.charAt(1));

灵活的答案:使用正则表达式。您需要对它们有所了解,但它们提供了极大的灵活性。

【讨论】:

    【解决方案3】:

    尝试正则表达式

     str.matches("[a-h][1-8]");
    

    【讨论】:

      【解决方案4】:

      将其转换为字符数组,"a1".toCharArray()

      将 char[0] 与您的字段 'a'....'h' 进行比较,您可以使用 == 现在它是一个原始类型,如 chars[0] == 'a'。

      您可以对 chars[1] == '1'.... 执行相同操作。

      如果这样做,则必须与字符值进行比较。

      【讨论】:

        【解决方案5】:

        速度、内存或效率重要吗?看起来您应该创建两个列表,遍历它们(嵌套),然后测试连接的列表值是否为 ==。比如 ((myList(indexOuter) + my2ndList(indexInner)) == "theListHoldingYourStrings(stringIndex))。我是 Java 新手,但不知道什么是最快、最有效的方法。

        使用 64 个成员的 switch 语句。

        switch(stringToTest) {
        case "a1":  System.out.println("Valid");
                     break;
        case "a2": System.out.println("Valid");
                     break;
        

        。 . .

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-04
          • 1970-01-01
          • 2021-06-17
          • 2011-07-11
          • 2014-11-01
          • 1970-01-01
          • 2020-12-12
          相关资源
          最近更新 更多