输入只能是字符串

问题描述:

我正在创建一个JOptionpane,用户可以输入hes名称。因此,它不能为空,也不能是数字输入只能是字符串

空的部分工作,但现在我必须找到数字部分

的解决方案正如你可以在我的代码中看到我做了一个while循环来检查“naam”是否为空。现在我需要找到一种方法来检查“naam”是不是一个数字。

String naam = JOptionPane.showInputDialog("Geef uw naam in: "); 

while (naam.equals("")) { 
    JOptionPane.showMessageDialog(null, "Geef een naam in", "Geef naam", JOptionPane.ERROR_MESSAGE); 
    naam = JOptionPane.showInputDialog("Geef uw naam in: "); 
+0

我会创建一个自定义的'JDialog'并在'JTextField'上应用'DoumentListener',其中'JButton'被禁用,直到'JTextField'有一个有效的输入。 – 2013-03-07 23:48:18

您可以使用正则表达式来检查它是否包含任何数字。 java中的正则表达式“\\ D”代表非数字,“+”代表1或更多。所以,你可以改变你的while循环:

while (!naam.matches("\\D+")) 

这将包括空等于检查,因为你需要至少有一个非数字为它匹配。

使用regular expressions

if (naam.matches("\\d+")) {/*it is a number*/} 

String.matches(regexp)返回true如果字符串给定的参数的正则表达式匹配。在这个例子中,\\d+匹配一个或多个数字。

您可以尝试使用其他模式以禁止使用无效字符的字符串(例如“My#name”),但这取决于您对“名称字符”的定义。

例如,[A-Z][a-z]*(?:\\s[A-Z][a-z]*)会匹配具有一个或多个大写字母序列后跟零个或多个小写字符的字符串,每个序列由一个空格分隔,如My Name Is X

你可以简单地在对话框中直接筛选,而不是搞乱不必显示错误对话框,并重新显示在对​​话框输入,...

import java.awt.EventQueue; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.text.AbstractDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 

public class TestOptionPane08 { 

    public static void main(String[] args) { 
     new TestOptionPane08(); 
    } 

    public TestOptionPane08() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JTextField name = new JTextField(10); 
       ((AbstractDocument) name.getDocument()).setDocumentFilter(new DocumentFilter() { 
        public String filter(String text) { 
         StringBuilder sb = new StringBuilder(text.length()); 
         for (char c : text.toCharArray()) { 
          if (!Character.isDigit(c)) { 
           sb.append(c); 
          } 
         } 
         return sb.toString(); 
        } 

        @Override 
        public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { 
         super.insertString(fb, offset, filter(string), attr); 
        } 

        @Override 
        public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
         String filter = filter(text); 
         super.replace(fb, offset, length, filter, attrs); 
        } 
       }); 

       JOptionPane.showMessageDialog(null, name, "Name Please", JOptionPane.QUESTION_MESSAGE); 

      } 
     }); 
    } 
} 

现在,您可以添加到JTextFieldJPanel添加一个JLabel以及甚至错误消息...

+1

+1很好的答案。 – 2013-03-07 23:53:54

+0

我不喜欢乱搞; – MadProgrammer 2013-03-07 23:54:55

+0

+1我只是害怕初学者会很难理解它。 – ddmps 2013-03-08 00:00:36