今天弄了个字符分割程序,想把数字和汉字分割出来,代码如下:
import java.util.List;
import java.util.ArrayList;
public class Charcheck {
@SuppressWarnings("unchecked")
public List<String> chang(String str){

int len=str.length();
int i;
for(i=0;i<len-1;i++){
if (!Character.isDigit(str.charAt(i))&&".".equals(str.charAt(i)))
break; }
String d=str.substring(0, i);
String c=str.substring(i,len);
List<String> list=new ArrayList();
list.add(d);
list.add(c);
return list; }

public static void main(String[] args){
Charcheck ch=new Charcheck();
String s="98.66666元";
       List<String> list=ch.chang(s);
       String d=list.get(0);
       String c=list.get(1);
       System.out.println(d);
       System.out.println(c);
}
结果输出:
98.66666

居然得到结果了.百思不得其解,这句代码大家觉得有毛病吗?if (!Character.isDigit(str.charAt(i))&&".".equals(str.charAt(i))) break;.翻译过来应该是:字符串str当中位置为i的字符如果不是数字并且也不是小数点 循环中断,那么字符串"98.66666元"在循环到小数点的时候就应该中断啊!难道java语言里的&& 和C不一样,如果我没有记错的话,&&应该是只要判断一个结果不符合就不用判断了,所以后来我认为是java把小数点也当做数字,就把&&".".equals(str.charAt(i))这段去掉,结果得到:98
   .66666元
大家讨论一下啊!

解决方案 »

  1.   

    大哥。。
    if (!Character.isDigit(str.charAt(i))&&".".equals(str.charAt(i))) break;.
    这句话的意思是,当当前i的字符不是数字并且不为.的时候跳出循环。
    你循环到小数点的时候为什么要中断啊,虽然前面不是数字成立,但后面那个是否不为.不成立
    肯定不会跳出循环啊~
      

  2.   

    &&
    成立的条件为两个都为true才成立啊~
    你把&&".".equals(str.charAt(i))
    这个去掉
    就等于判断是当不为数字的时候跳出循环。
    这个代码完全正常啊
    楼主大哥,你想啥去了~
      

  3.   

    &&是只判断前面为假后面就不判断了
    Character.isDigit(str.charAt(i))这句话当是数字的时候返回为true
    不是数字的时候返回为false
    但是你前面加了!非这个标记啊
    拜托,仔细想想啊~
      

  4.   

    ".".equals('.') 不相等
    用 '.' ==str.charAt(i)
      

  5.   


    这位兄弟
    你知道.equals(),和 ==的区别么??
    .equals()是判断值相等
    而==是判断内存地址是否相等~
      

  6.   

    你的代码有问题:".".equals(str.charAt(i)) 这个条件永远是false,因为String和char是两种不同的对象,正确的写法应该是 'c' == str.charAt(i)
      

  7.   

    ".".equals(str.charAt(i))永远是false
    一个是字符串,一个是String类型
    4L正解
      

  8.   

    按四楼改后,你条件判断有问题
    意思是不是数字而且是句点的时候,的确应该在句点的时候跳出循环
    还有下标设置也有问题
    正确写法:for (i = 0; i < len; i++) {
    if (!Character.isDigit(str.charAt(i)) && '.'!=str.charAt(i))
    {
    System.out.println(i+" in");
    break;
    }
    }
    String d = str.substring(0, i);
    String c = str.substring(i, len);
      

  9.   

    for (i = 0; i < len; i++) {
                if (!Character.isDigit(str.charAt(i)) && '.'!=str.charAt(i))
                {
                    System.out.println(i+" in");
                    break;
                }
                            }
            String d = str.substring(0, i);
            String c = str.substring(i, len);
      

  10.   

    import java.util.List; 
    import java.util.ArrayList; 
    public class Charcheck { 
    @SuppressWarnings("unchecked") 
    public List <String> chang(String str){ int len=str.length(); 
    int i; 
    for(i=0;i <len;i++){ 
    if (!Character.isDigit(str.charAt(i))&& '.'!=(str.charAt(i))) 
    {
    break; 
    }

    String d=str.substring(0, i); 
    String c=str.substring(i,len); 
    List <String> list=new ArrayList(); 
    list.add(d); 
    list.add(c); 
    return list; } public static void main(String[] args){ 
          Charcheck ch=new Charcheck(); 
          String s="98.66666元"; 
          List <String> list=ch.chang(s); 
          String d=list.get(0); 
          String c=list.get(1); 
          System.out.println(d); 
          System.out.println(c); 

    }