【问题标题】:Simplest way to validate string (Java) [closed]验证字符串的最简单方法(Java)[关闭]
【发布时间】:2016-05-10 18:25:19
【问题描述】:

我想检查一个字符串是否满足以下条件:

  • 正好由两个词组成
  • 每个单词只包含字母(A-Z 和 a-z),并且至少有两个字母长
  • 这两个词只用一个空格隔开

例如,“Jon Snow”应该验证,以及任何其他名称只包含一个名字和一个姓氏,并且没有特殊字符。

确保此验证的最简单方法是什么?

谢谢!

【问题讨论】:

  • 告诉我们您的尝试
  • 那么,您知道正则表达式,但还没有找到解决方案?我不想让您失望,但是在任何正则表达式教程网站上找到问题答案所需的时间都少于您创建问题所花费的时间。
  • 我尝试过研究正则表达式,但我似乎无法完全理解它。这是我尝试过的最新代码示例:
  • @sidgate @user3707125:抱歉,我不知道如何在 cmets 中正确发布代码,但我尝试的正则表达式是:if (name.matches("([a-zA-Z]) ([a-zA-Z])")) 但这对于“Jon Snow”返回 false ”。感谢您的耐心等待。
  • 投票结束过于广泛。请注意,太宽泛并不意味着太复杂。

标签: java regex string validation


【解决方案1】:

正则表达式部分你可以试试:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class TestRegex {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("[a-zA-Z]+ [a-zA-Z]+");

        Matcher m = p.matcher("Jon Skeet");
        boolean b = m.matches();
        System.out.println(b);
    }
}

【讨论】:

    【解决方案2】:

    这实际上很容易实现。要求#1 和#3 是最简单的。要测试一个字符串是否包含两个单词并且由一个空格分隔,只需使用split 方法。对于需求 #2,测试字符串的长度是否大于 2。

    假设您要测试的字符串称为str\

    String str = "Jon Skeet";
    

    您可以创建布尔变量来存储每个测试的结果。更容易理解。

    String[] splitString = str.split(" ");
    boolean test1 = splitString.length == 2;
    boolean test2 = true;
    for (String s : splitString) {
        if s.length() < 2 {
            test2 = false;
        }
    }
    

    如您所见,我实际上将字数测试和“以空格分隔”测试合二为一。因为可以使用一种方法同时测试它们。

    现在你有了test1test2。你只需要看看他们是否都是true

    if (test1 && test2) {
        System.out.println("THE STRING IS VALID!");
    }
    

    您甚至可以将其提取为方法:

    public static boolean isStringValid(String str) {
        String[] splitString = str.split(" ");
        boolean test1 = splitString.length == 2;
        boolean test2 = true;
        for (String s : splitString) {
            if s.length() < 2 {
                test2 = false;
            }
        }
    
        if (test1 && test2) {
            return true;
        }
        return false;
    }
    

    或者您可以一次性完成所有测试,尽管人们很难理解您在做什么。

    boolean test = splitString.length > 2 && splitString[0].length() >= 2 && splitString[0].length() >= 2;
    

    编辑:

    如果您想查看它是否只包含字母,请致电Character.isLetter

       boolean test2 = true;
       boolean test3 = true;
       for (String s : splitString) {
            for (int i = 0 ; i < s.length() ; i++) {
                if (!Character.isLetter(s.charAt(i))) {
                    test3 = false;
                }
            }
            if (s.length() < 2 && ) {
                test2 = false;
                break;
            }
        }
    

    【讨论】:

    • 对不起,我对正则表达式一无所知。请参阅我编辑的代码。 @iLoveNachos
    • 谢谢!绝对完美!工作就像一个魅力,我完全理解它:-)
    • 如果您认为我的回答回答了您的问题,请考虑接受。只需按选票下方的勾号! @iLoveNachos
    • 答案很完美,我已经将其标记为可接受的答案。 :-) 我也给了你一个赞成票,但我还没有足够的声誉让它可见。你能看到被接受的标记吗?
    • @iLoveNachos 是的,我可以!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2021-08-13
    • 2010-10-18
    • 2011-08-06
    • 2011-06-08
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多