0

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

13B 大街 13 B 大街 13B 大街 13 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
}

请注意,上面的代码是我快速拼凑起来的——有些方法不存在并且无法编译。

我的意思是它看起来很乱。ifs里面有很多ifs。当我看着它时,我看到了一些非常不雅的东西。如果我真的要对整个事物进行编码,能够以这 4 种格式获取地址,那将是数十行代码。

我在这里缺少一个技巧吗?有没有办法让它变得不那么丑陋?

4

3 回答 3

1

检查所有可能的排列几乎是不可能的。最好确保它只包含数字或字母,可能使用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
}
于 2013-08-20T21:53:14.447 回答
1

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

于 2013-08-20T21:52:27.913 回答
0

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

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

Apache Commons StringUtils可以为您轻松完成此操作。

于 2013-08-28T07:19:27.593 回答