2010-10-26 70 views
1

我有一个关于在Java验证的问题,我看了以前的话题,似乎没有人回答我的小问题。验证在Java中的字符串

我想要做的是验证什么是在构造函数中放入字符串变量,但也使用set方法时。

我需要的是如果先生小姐太太或女士被输入,然后将其设置为变量(标题),如果不是,则将标题设置为“未设置”并打印错误,现在我知道如何到最后一部分,其验证用户输入到变量我卡在...我试过使用数组,但不能得到它的工作,并尝试如果语句,再次无法得到它的功能

+1

发布您的[编辑]代码。 – hvgotcodes 2010-10-26 18:57:00

回答

4
public void setTitle(final String title) 
{ 
    if (title.matches("^Mrs|Mr|Miss|Ms$")) 
    { 
    this.title = title; 
    } 
    else 
    { 
    this.title = "Not Set"; 
    System.err.format("%s is not a valid title, expecting Mrs,Mr,Miss,Ms\n", title); 
    } 
} 

,如果你想要做的不区分大小写然后改变正则表达式:

"(?i)^Mrs|Mr|Miss|Ms$" 

那么你可以小写整个事情和大写只是第一个字母重新归你输入你真正想要的东西。谷歌为“Java正确的案例”找到一些预先编写的代码片段。

更简洁的一个衬垫,再次区分大小写:

public void setTitle(final String title) 
{ 
    title.matches("^Mrs|Mr|Miss|Ms$")) ? this.title= title: this.title= "Not Set"; 
} 
+1

我更喜欢这个答案......与Regexp相当灵活! – Necronet 2010-10-26 19:16:23

0

使用此

String title = textBoxTitle.getText(); 
    if(!title.equals("Mr") && !title.equals("Miss") && !title.equals("Mrs") && !title.equals("Ms")) 
    { 
     // Text is invalid 
    } 
    else 
    { 
     // Text is valid 
    } 
+1

负面测试很难从硬性的角度阅读和理解,为什么不测试等于||等于||那会比这样的负面测试更好。 – 2010-10-26 19:29:48

0

为什么不直接调用,它验证,然后设置值小法?

private void validateString(String) { 

if string is valid 
call setter 
} 
+0

或把它变成'validateAndSet()',并从ctor和public setter调用 – Anon 2010-10-26 19:12:32

+0

一个方法名不应该有一个不期望的副作用,这是一个可怕的名字。方法应该只做一件事而且只做一件事,内部工作应该是一个黑盒子,绝对没有理由在方法的名称中“验证”。所有来电者应该关心的是最终结果。如果你打算把它称为“isValidPrefix”,然后返回true或false,那会更好,因为它现在很糟糕。 – 2010-10-26 19:26:08

-1

我敢肯定ü没有类似的东西 -


    if(title =="Mr."){ blah.. } // this will check the address

do this instead ..

if(title.equals("Mr."){blah..} // this will check the values..

+0

这就是我在做''title.equals'时所做的'我意识到我做错了什么。 – Chris 2010-10-27 01:22:47

-1

创建一组您所关心的话(大写它们),然后看看标题是否属于该集合:

Set allowedTitles = new HashSet(); 
allowedTitles.add("MR"); 
allowedTitles.add("MRS"); 
allowedTitles.add("MS"); 
allowedTitles.add("MISS"); 
if (! allowedTitles.contains(textBoxTitle.getText().trim().toUpperCase()) { 
    //print exception 
} 
else { title = textBoxTitle.getText().trim()); 
+0

检查大写是unicode的一个坏主意,unicode中的大写字母可能会产生问题,另一个大写字母会被归一化为相同的字符。原始问题也希望他们在正确的情况下,他们没有指定任何关于不区分大小写的内容。 – 2010-10-26 21:04:11

+0

够公平的。然后使用toLowerCase()。我认为downvote有点苛刻,因为概念是使用“contains”。如果案件不是问题,那么显然不要打扰。 – 2010-10-27 15:34:50