Java忽略了布尔评估

时间:2013-06-30 00:47:24

标签: java boolean

if (!(portField.getText().equals(""))) {                
    String p = portField.getText();
    CharSequence numbers = "0123456789";

    if (p.contains(numbers)) {

        listener = new ServerSocket(Integer.parseInt(p));

        while (true) {
            Socket socket = listener.accept();
            try {
                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                out.println("Hi there, human.");    
            } finally {
                socket.close(); 
            }
    }} else {
        JOptionPane.showMessageDialog(null, "Only numbers are allowed.");
    }
} else {
    JOptionPane.showMessageDialog(null, "Please input a port.");
}

问题是:即使我在JOptionPane中输入数字,portField也会弹出“只允许数字”。 CharSequence和我测试它的方式只允许输入数字,据我所知,是正确的,Java忽略整个块并跳转到else子句。

为什么会这样?我不应该使用else而是使用else if吗?

1 个答案:

答案 0 :(得分:8)

contains表示包含整个0123456789。例如:"a0123456789b"

改为使用p.matches("[0-9]*");