【问题标题】:how do I filter what I entered in the JTextField and display the filtered result?如何过滤我在 JTextField 中输入的内容并显示过滤后的结果?
【发布时间】:2015-05-13 03:46:52
【问题描述】:
package javaisnotbannana;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class  Javaisnotbannana{

    public static void main(String[] args) { 
        window();
    }       
////////////////////////////////////////////////////
public static void window()
    {
     JFrame window= new JFrame();
     JPanel jp = new JPanel();
     JLabel jl = new JLabel();
     JTextField jt = new JTextField(30);
     JButton jb = new JButton("Enter");
     window.setTitle("ThisisTitleofWindow");
     window.setVisible(true);
     window.setSize(500, 500);
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     //textfield
     jp.add(jt);
     jt.addActionListener(new ActionListener()
     {
     public void actionPerformed(ActionEvent e)
     {
     String inoutt = jt.getText();

     jl.setText(inoutt); 
     }
     });

为什么这个下部有问题“线程中的异常“AWT-EventQueue-0”java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:(我输入了多少个字符)“.str 正在接收输入的内容在 Jtextfield 中,我试图过滤输入以提供不同的输出。如果没有过滤器,它可以像上面一样正常工作,只需按 enter,但是当我尝试按下按钮 i 并过滤时,我得到一个错误。

//button
     jp.add(jb);
     jb.addActionListener(new ActionListener()
     {
     public void actionPerformed(ActionEvent e)
     {
     String str = jt.getText();
     String text="";
     int A=0;
     int B=1;
     int C=2;
     for(int num=0;num<=str.length()/3;num++)
        {
            if (str.charAt(A) == 'T'&&str.charAt(B) == 'A'&&str.charAt(C)=='S')
            {
            text+="smell tasty";
            }
            else if(str.charAt(A) == 'B'&&str.charAt(B) == 'A'&&str.charAt(C)=='N')
            {
            text+="bannanas";
            }
            A+=3;
            B+=3;
            C+=3;
        }
     jl.setText(text);
     }
     });
     jp.add(jl);
     window.add(jp);
    }
}

【问题讨论】:

  • 检查行号,正在操作的字符串,它试图命中的字符串索引。索引看起来合适吗?我怀疑这是因为 A、B 或 C 变成 >= 字符串的长度。
  • 这条线有错误“for(int num=0;num
  • 您确定if (str.charAt(A) == 'T'&amp;&amp;str.charAt(B) == 'A'&amp;&amp;str.charAt(C)=='S') 行没有发生这种情况吗? :S
  • if ("tas".equalsIgnoreCase(str)) { text = "smell tasty"; } 之类的?
  • 它说我超出了我输入的数量所以 String str = jt.getText();可能什么都没有,但它应该使它等于我输入的文本。

标签: java string jframe jtextfield indexoutofboundsexception


【解决方案1】:

你的索引超出了使用这个代替

for(int num=0;num<str.length()/3;num++)

只是

【讨论】:

    【解决方案2】:

    问题似乎是你想多了。请记住,Java Strings 是零索引的,所以 num&lt;=str.length()/3 应该更像 num &lt; str.length()/3

    但是,话虽如此,整个事情似乎效率很低(更不用说令人困惑)

    你可以使用类似...

    for (int num = 0; num + 3 < str.length(); num++) {
        String test = str.substring(num, 3);
        if ("tas".equalsIgnoreCase(test)) {
            text = "smell tasty";
            break;
        } else if ("ban".equalsIgnoreCase(test)) {
            text = "bannanas";
            break;
        }
    }
    

    但即便如此,解决一个原本简单的问题也有很长的路要走。

    相反,您可以简单地使用类似...

    String str = "tas";
    String text = "";
    if (str.toLowerCase().contains("tas")) {
      text = "smell tasty";
    } else if (str.toLowerCase().contains("ban")) {
      text = "bannanas";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2019-05-24
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多