gpt4 book ai didi

java - 我如何获取 TextField 输入,获取每个字母,并将其放入字符中?

转载 作者:行者123 更新时间:2023-12-01 14:04:48 24 4
gpt4 key购买 nike

我正在尝试使用 GUI 编写代码,允许用户在 JTextField 中输入单词,然后检查它是否是回文(即 Ono 是回文,来回相同)。我如何获取 JTextField 并将它们转换为字符来检查句子是否是回文? (另外,我如何删除空格、标点符号等?)这是我当前的代码设置

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!");
}
}
}

}编辑:我修改了代码,在解析字符串时犯了一个错误,我可以让字符字母进入测试,并且我可以获取出现在字符中并输出的单词

EDIT2:所以我现在的主要问题是,即使我可以将内容添加到堆栈中,为什么我的字符串上的 .replace/.tolowercase 不执行任何操作?我在 TextField 中输入的字符串不会被替换(即 HELLO WORLD 保持为 HELLO WORLD,而不是 helloworld),并且我的堆栈中始终存在空值,即使它从 inputWord 中获取字母? (即 HELLO 将为 nullOLLEH)我也尝试将其放入字符串中

compare+=stack.pop();

但是它所做的只是将带有 null 的字母添加到每个字母中? (nullnullO, nullOL nullOLL) 为什么它有一个 null?

编辑3:它有效!我的做法有点乏味,因为我必须使用堆栈进行比较(出于学习目的)

最佳答案

您的代码中有一些错误:

  1. 首先,您的 toUpperCase() 不起作用,因为您需要将此调用的结果分配回变量。因此,将 inputWord.toLowerCase(); 替换为:inputWord = inputWord.toLowerCase();。这是因为 String 在 Java 中是不可变的。

  2. 您还可以使用简单的正则表达式来简化代码。使用 inputWord.replace("[ !',-]",""); 而不是所有调用来替换并再次将结果分配给变量。像这样: inputWord = inputWord.replace("[ !',-]","");

  3. 现在你有一个 null,因为你从未初始化你的 letter 字符串。只需在循环之前添加一点letter="",null 就会消失。

  4. 最后只需在堆栈上使用 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);
    }

关于java - 我如何获取 TextField 输入,获取每个字母,并将其放入字符中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com