我想判断一个jTextArea中是否有空格,采用jTextArea.getText().subString(i,i+1)==" ";的方法,但是无法正确判断哦。。即使是空格,这个方法也判断不出。如果改成jTextArea.getText().subString(i,i+1).equals(" ");就成了请问这个是为什么呢?另外还想请问下,对于加了ActionListener的jComboBox,如何取得状态改变前的item的选项呢?用ItemEvent.ITEM_LAST好象不行哦。。

解决方案 »

  1.   

    这个...等于号和equals的区别。一般字符串比较的时候都用equals,equals可以判断内容是否相同,但是==号判断的是引用是否相同。
      

  2.   

    你的后者方法是对的啊,空格就是那样子的
    你也可以直接用空格的值来判断,空格的ASCII值为32
    然后你只要把字符串里的字符一个一个比较就可以了,如果等于32,则为空格符
    String content=JTextArea.getText();
    for(int i=0;i<content.length();i++){
    char c=content.charAt(i);
    if(c==32){System.out.println("第"+i+"个字符是空格");
    }}
      

  3.   

    1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”kvill”; String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。 看例1: String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 
    结果为: true true 首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。 因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”kvill”的一个引用。 所以我们得出s0==s1==s2; 用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。 看例2: String s0=”kvill”; String s1=new String(”kvill”); String s2=”kv” + new String(“ill”); System.out.println( s0==s1 ); System.out.println( s0==s2 ); System.out.println( s1==s2 ); 结果为: false false false 
    例2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果了。 
    所以楼主,你的后者是正确的,原因就是这样的至于 第二个问题JComboBox可以引发ActionEvent和ItemEvent事件以及其他事件.选中一个新的选项时,JComboBox会产生两次ItemEvent事件,一次是取消前一个选项,另一次是选择当前选项.产生ItemEvent事件后JComboBox产生一个ActionEvent事件.要响应ItemEvent事件,需要实现处理方法itemStateChanged(ItemEvent e)来处理选择.
    例如,从处理器itemStateChanged(ItemEvent e)中获取数据:
    public void itemStateChanged(ItemEvent e) 

    // Make sure the source is a combo box
    if (e.getSource() instanceof JComboBox)
    String s = (String)e.getItem(); 
    }你可以判断
    if(e.getStateChange()==e.DESELECTED)
    {
      System.out.println("ESELECTED: e.getItem()= "+e.getItem());
    }
      

  4.   

    当比较的对象是对象引用:"==" 不涉及对象内容的比较,而是对内容地址是否相等做比较。      如果要比较两对象的内容时候相等时,需使用equals