1

我需要说的是,如果单击按钮时输入(文本字段)为空,则打印一条消息。如果输入中的一个字符不等于“合法”列表中的一个元素,则打印另一条错误消息。如果输入中的所有字符都很好,则将它们添加到某个列表并打印一条消息 msg

    String[] legal={"a", "b", "c", "d" ,"e" ,"f" ,"g" ,"h" ,"i" ,"j" ,"k" ,"l" ,"m" 
 ,"n","o","p","q","r","s","t","u","w","x","y","z","-","_"}; 

    if(e.getSource() == add){

        if (txt.getText().equals("")){

            content.removeAll();
            content.add(empty);           
            content.revalidate();

        }  
        String[] splited = txt.getText().toLowerCase().split("");
        for (int t=0;t<splited.length;t++) {
            for (int u=0;u<legal.length;u++){
                if(splited[t] != legal[u]){

                    content.removeAll();
                    content.add(check);
                    content.revalidate();
                }
                else if(splited[t].equals( legal[u])){

                    content.removeAll();
                    list.add(txt.getText());
                    content.add(msg);
                    content.revalidate();

                }
            }
        }
    }
4

2 回答 2

4

让我们暂时将 UI 排除在外。

要测试 aString是否为空,您有许多选项,基于您认为空String的内容,例如...

if (text == null || text.trim().isEmpty()) {...}

当删除前导和尾随空格时,将捕获String值是长度null或长度的事件。0

要检查 a 是否String包含一组有效的字符,使用 API 提供的正则表达式功能会简单得多,例如...

if (text.matches("[a-z\\-_]+")) {
    System.out.println("Matches");
}

将匹配aandz_,字符之间的所有-字符。这意味着String必须是小写的;)

于 2013-11-06T02:15:38.173 回答
2

您的代码中的问题在这里:

if(splited[t] != legal[u]){

您不能使用==and!=来比较字符串。相反,您必须检查:

if(!splited[t].equals(legal[u])){

此外,您的逻辑可以简化为一种情况和另一种情况:

if(splited[t].equals(legal[u])){
    // it is legal
} else {
    // it is not legal 
}

也就是说,有更简单的方法可以做到这一点。例如,您可以不使用split("")by using直接访问字符String.charAt()。您也可以使用直接将 a 转换String为 a 。char[]String.toCharArray()

然而,你有一个普遍的过度使用String(例如你String[]可能真的是 a char[])。

您也可以很容易地使用正则表达式,而无需所有这些String数组和拆分,请参阅String.matches(),例如:

if (txt.matches("[a-zA-Z_-]+")) { 
    // string is legal
} else {
    // string is not legal
}
于 2013-11-06T02:16:26.600 回答