编码风格:检查用户输入很混乱.我做错了吗



每当我检查用户输入时,它总是变得非常混乱。这方面的一个例子可能是地址输入。你可以有以下几种:

主街13B主街13号B主街13b13 B,大街

如果我对它进行编码,它最终会像一样

String number,letter,street; //To be filled with "13","B","Main Street"
String address = getUserInput();
String[] tokens = address.split(" ");
if(tokens[0].isNumeric() == false){
    //It could be 13B rather than 13
    String number = "";
    for(Character c: tokens[0].toCharArray()){
        if(c.isDigit() == false){
            //We could have found the apartment letter
            if(number.isEmpty()){
                //The address is invalid, throw error.
            } else {
                //Make sure it was a letter
                if(c.isLetter()){
                    letter = c;
                } else {
                    //throw error
                }
            }
        } else {
            number += c;
        }
    }
} else {
    //...continue all other possibilities
}

请注意,上面的代码是我很快拼凑起来的——有些方法不存在,它也不会编译。

我的观点是它看起来很乱。如果里面有那么多如果。当我看着它时,我看到了一些非常不自然的东西。若我真的对整个东西进行编码,能够以这4种格式获取地址,那将是几十行代码。

这里有我错过的把戏吗?有没有办法让它不那么难看?

正则表达式通常用于输入验证,与您的问题密切相关。一个优秀的教程可以在这里找到:http://www.vogella.com/articles/JavaRegularExpressions/article.html

检查每个可能的排列几乎是不可能的。最好是确保它只包含数字或字母,可能使用regex。原因是有这么多不同类型的地址,你不可能解释所有的。然而,你知道地址街只有字母和数字(有时是-或连字符),但我认为你明白了。你可以检查以确保地址只包含有效字符,但任何超出这一范围的内容都会很混乱;耗时。

通过使用正则表达式,您可以检查以确保地址在1或2行代码中只包含有效字符,这样会更干净。

类似:

String address = getUserInput();
if(address.matches("[^A-Za-z0-9]*"))
{
  //perform actions for accurate address
}
else
{
  //do other action for invalid address
}

您将始终需要检查字符串是空的(即检查CharSequence是否为空(")或null)还是空白的(即检测CharSequence是空白、空(")还是null)以及许多其他内容。

甚至还有一些方便的方法,比如isNotBlank和isNotEmpty,可以让你免于否定逻辑条件。

Apache Commons StringUtils可以很容易地为您做到这一点。

最新更新