Java 我如何获取文本字段输入,获取每个字母,并将其放入字符中?

Java 我如何获取文本字段输入,获取每个字母,并将其放入字符中?,java,swing,char,stack,jtextfield,Java,Swing,Char,Stack,Jtextfield,我试图用GUI编写代码,允许用户在JTextField中输入一个单词,然后让它检查它是否是回文(即Ono是回文,前后相同)。如何将JTextField转换成chars来检查句子是否是回文?(还有,我如何删除空格、标点符号等?) import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Stack; /** * Write a description of class Palidroma

我试图用GUI编写代码,允许用户在JTextField中输入一个单词,然后让它检查它是否是回文(即Ono是回文,前后相同)。如何将JTextField转换成chars来检查句子是否是回文?(还有,我如何删除空格、标点符号等?)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Stack;

/**
 * Write a description of class Palidromania_Kevin here.
 * 
 * @author Kevin Hy
 * @version 09/23/13
 */
public class Palindromania extends JFrame
{
    public JPanel panel1,panel2;
    public JLabel main1;
    public JButton check;
    public JTextField enterPal;
    public String inputWord,letter;
    public int num;
    public char checker;
    public Stack<String> stack = new Stack<String>();
    public Palindromania ()
    {
        super ("Palindromania Checker");
        setSize (1024,768);
        Container container = getContentPane();

        panel1 = new JPanel();     
        panel1.setBackground (new Color(10,50,50));
        panel1.setLayout (new FlowLayout());
        panel2 = new JPanel();     
        panel2.setBackground (new Color(255,255,255));
        panel2.setLayout (new FlowLayout());

        main1 = new JLabel ("Palindromania Checker");

        check = new JButton("Verify Palindrome");
        ButtonHandler handler = new ButtonHandler();
        check.addActionListener(handler);
        enterPal = new JTextField(8);
        container.add(panel1,BorderLayout.NORTH);
        container.add(panel2,BorderLayout.CENTER);
        panel2.add(enterPal);
        panel2.add(check);
        setVisible(true);
    }

    public static void main (String [] args)
    {
        Palindromania application = new Palindromania ();   
    }
    public class ButtonHandler implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
    {
        if (event.getSource () == check)//Check if palindrome button
        {
            inputWord="";letter="";
            inputWord=enterPal.getText();
            inputWord=inputWord.toLowerCase();
            inputWord=inputWord.replace("[ !'-,]","");
            for (int x=0; x<=inputWord.length()-1;++x)//inputs lettes into the stack
            {
                checker=inputWord.charAt(x);
                letter+=checker;
                stack.add(letter);
                letter="";
                JOptionPane.showMessageDialog (null, stack.peek());
            }
             for (int x=0; x<=inputWord.length()-1;++x)//inputs lettes into the stack
            {
                checker=inputWord.charAt(x);
                letter+=checker;
                stack.add(letter);
                if (letter.equals(stack.pop()))
                num+=1;
                letter="";
            }
            if (num==inputWord.length())
            JOptionPane.showMessageDialog (null, "You have a palindrome!");
            else
            JOptionPane.showMessageDialog (null, "This is not a palindrome, sorry!");
        }
    }
}
但它所做的只是在每个字母上加上null?(nullnullO,nullOL nullOLL)为什么它有一个null


EDIT3:它起作用了!我不得不这样做有点乏味,因为我必须使用堆栈进行比较(出于学习目的)

您的代码中有一些错误:

  • 首先,您的
    toUpperCase()
    不起作用,因为您需要将此调用的结果赋回变量。所以替换这个:
    inputWord.toLowerCase()通过此:
    inputWord=inputWord.toLowerCase()。这是因为
    String
    在Java中是不可变的

  • 您还可以通过使用简单的正则表达式简化代码。使用
    inputWord.replace(“[!”、-]”、“”)
    而不是所有要替换的调用,并再次将结果分配给变量。如下所示:
    inputWord=inputWord.replace(“[!”,-]”,“”)

  • 现在您有一个空值,因为您从未初始化
    字母
    字符串。只需在循环之前添加一点
    letter=”“
    ,空值就应该消失了

  • 最后,只需在堆栈上使用
    pop()
    ,即可获得循环后的反向字符串,并将其与原始字符串进行比较。就这样,

    if(inputWord.equalsIgnoreCase(stack.pop())){
           JOptionPane.showConfirmDialog(null, "This is a Palindrome", "Is this a palindrome ?", JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE);
    }
    else {
           JOptionPane.showConfirmDialog(null, "This is NOT a Palindrome", "Is this a palindrome ?", JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE);
    }
    

  • 你为什么把绳子推到一堆上?如果你知道你想做什么的要点,那就给我们解释一下。这似乎是要求某人为您编写代码,这被认为是不合适的。显示您迄今为止为解决您遇到的特定问题所做的工作。为什么不简单地将其与原始问题进行比较?我无法反转字符串,因为我们应该使用堆栈或队列将字符串一起进行比较(因为堆栈接收字母,而单词本身将是背景词,它应该能够进行比较?)谢谢你的帮助!虽然我不能使用比较这个词,因为我必须比较每个字母(作为使用堆栈、单个字母和所有字母的学习过程)。我的代码演变成了两个几乎相同的for循环,用于比较每个字母。这一切都是可行的,但我还有最后一个问题,如果我使用的回文前面或后面有标点符号,它就不是回文了?(也就是说,如果我把老鼠放在没有邪恶的星星上,如果我把!放在老鼠之前或之后,它就不起作用了?)那么你根本不想删除标点符号?我想删除标点符号,但是当我放置(例如,老鼠放在没有邪恶的星星上是回文)时,但是当我放标点符号时,说!在老鼠前面或星星后面,它不会删除标点符号,也不会将其注册为回文?(!老鼠生活在没有邪恶的星星上不是回文,尽管它应该删除它)
    if(inputWord.equalsIgnoreCase(stack.pop())){
           JOptionPane.showConfirmDialog(null, "This is a Palindrome", "Is this a palindrome ?", JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE);
    }
    else {
           JOptionPane.showConfirmDialog(null, "This is NOT a Palindrome", "Is this a palindrome ?", JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE);
    }