字符串解析-Java

字符串解析-Java,java,Java,我对java相当陌生,所以请对我放松点 我已经创建了一个窗口、窗格、标签、文本字段等 要查看用户在文本字段中输入的内容(作为字符串),最简单的代码是什么,正如我所知,对于float,您可以使用float.parseFloat(txtName.getText())?为了理解这个问题,这里有一个简单的例子,输出在JTextField中输入的内容并将其附加到JTextArea: public class Test { private static String ENTER = "Enter";

我对java相当陌生,所以请对我放松点

我已经创建了一个窗口、窗格、标签、文本字段等


要查看用户在文本字段中输入的内容(作为字符串),最简单的代码是什么,正如我所知,对于float,您可以使用
float.parseFloat(txtName.getText())

为了理解这个问题,这里有一个简单的例子,输出在
JTextField
中输入的内容并将其附加到
JTextArea

public class Test {
    private static String ENTER = "Enter";
    static JButton enterButton;
    public static JTextArea output;
    public static JTextField input;
    static JFrame frame;
    static JPanel panel;

    public static void main(String... args)
    {
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
        createFrame();
    }

    public static void createFrame()
    {
        frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setOpaque(true);
        ButtonListener buttonListener = new ButtonListener();
        output = new JTextArea(15, 50);
        output.setWrapStyleWord(true);
        output.setEditable(false);
        JScrollPane scroller = new JScrollPane(output);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        JPanel inputpanel = new JPanel();
        inputpanel.setLayout(new FlowLayout());
        input = new JTextField(20);
        enterButton = new JButton("Enter");
        enterButton.setActionCommand(ENTER);
        enterButton.addActionListener(buttonListener);
        input.setActionCommand(ENTER);
        input.addActionListener(buttonListener);
        DefaultCaret caret = (DefaultCaret) output.getCaret();
        caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
        panel.add(scroller);
        inputpanel.add(input);
        inputpanel.add(enterButton);
        panel.add(inputpanel);
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.pack();
        frame.setLocationByPlatform(true);
        // Center of screen
        // frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setResizable(false);
        input.requestFocus();
    }

    public static class ButtonListener implements ActionListener
    {

        public void actionPerformed(final ActionEvent ev)
        {
            Thread thread = new Thread()
            {

                public void run()
                {
                    if (!input.getText().trim().equals(""))
                    {
                        String cmd = ev.getActionCommand();
                        if (ENTER.equals(cmd))
                        {
                            output.append(input.getText() + "\n");
                        }
                    }
                    input.setText("");
                    input.requestFocus();
                }
            };
            thread.start();
        }
    }
}


注意:如果您想真正做到这一点,可以实现JTextField的一个子类,它甚至不允许用户输入无效浮点数字符:

public class FloatField extends JTextField {

    public FloatField(int cols) {
        super(cols)
    } 

    protected Document createDefaultModel() { 
        return new FloatDocument();
    } 

    static class FloatDocument extends PlainDocument {

        public void insertString(int offs, String str, AttributeSet a)
                          throws BadLocationException { 
            if( str == null ) 
                return;

            // Reject any string with invalid float characters.
            // TODO: this could be more sophisticated
            int len = str.length();
            for (int i = 0; i < len; ++i) {
                char c = str.charAt(i);
                if (c != '.' && c != '-' && !Character.isDigit(c))
                    return;
            }
            super.insertString(offs, str, a);
        } 
    } 
} 
public类FloatField扩展了JTextField{
公共浮动区(整数列){
超级(cols)
} 
受保护的文档createDefaultModel(){
返回新文档();
} 
静态类FloatDocument扩展了PlainDocument{
公共void insertString(int offs、String str、AttributeSet a)
抛出BadLocationException{
如果(str==null)
返回;
//拒绝包含无效浮点字符的任何字符串。
//托多:这可能更复杂
int len=str.length();
对于(int i=0;i

注意:这是一个不完善的实现,仅用于说明目的,仍然有许多无效的浮点数允许泄漏。

这个问题非常模糊,需要进一步澄清才能正确回答。不知道为什么会有这么多人反对,尤其是没有评论。我肯定其他人也问过同样的问题。无论如何,您的方法是正确的,但请务必使用try/catch,以防用户未输入有效的浮点数。我发现您的答案很有帮助,但Edward Falk的答案与我正在编写的程序更相关!如果你澄清了你的问题,也许我可以写一个更具体的答案。