如何比较来自jtextfield(.getText())的字符串输入与另一个String []数组? +几个条件

时间:2013-11-06 02:04:53

标签: java string string-comparison

我需要说的是,如果按钮被禁用时输入(文本字段)为空,则打印一条消息。如果输入中的某个字符不等于“合法”列表中的某个元素,则打印另一条错误消息。如果输入中的所有字符都正常,则将它们添加到某个列表并打印消息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();

                }
            }
        }
    }

2 个答案:

答案 0 :(得分:4)

让我们暂时取消用户界面。

要测试String是否为空,根据您认为空String的内容,您有多种选择,例如......

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

当删除前导和尾随空格时,将捕获String值为null0长度的事件。

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

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

将匹配az以及_-字符之间的所有字符。这意味着String必须为小写;)

答案 1 :(得分:2)

您的代码中存在问题:

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

您无法使用==!=来比较字符串。相反,你必须检查:

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

此外,您的逻辑可以简化为一个案例和其他案例:

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

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

但是,您过度使用String(例如,String[]可能真的是char[])。

您也可以非常轻松地使用正则表达式而不使用所有这些String数组并进行拆分,例如参见String.matches()

if (txt.matches("[a-zA-Z_-]+")) { 
    // string is legal
} else {
    // string is not legal
}