今天弄了个字符分割程序,想把数字和汉字分割出来,代码如下:
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元
大家讨论一下啊!
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元
大家讨论一下啊!
if (!Character.isDigit(str.charAt(i))&&".".equals(str.charAt(i))) break;.
这句话的意思是,当当前i的字符不是数字并且不为.的时候跳出循环。
你循环到小数点的时候为什么要中断啊,虽然前面不是数字成立,但后面那个是否不为.不成立
肯定不会跳出循环啊~
成立的条件为两个都为true才成立啊~
你把&&".".equals(str.charAt(i))
这个去掉
就等于判断是当不为数字的时候跳出循环。
这个代码完全正常啊
楼主大哥,你想啥去了~
Character.isDigit(str.charAt(i))这句话当是数字的时候返回为true
不是数字的时候返回为false
但是你前面加了!非这个标记啊
拜托,仔细想想啊~
用 '.' ==str.charAt(i)
这位兄弟
你知道.equals(),和 ==的区别么??
.equals()是判断值相等
而==是判断内存地址是否相等~
一个是字符串,一个是String类型
4L正解
意思是不是数字而且是句点的时候,的确应该在句点的时候跳出循环
还有下标设置也有问题
正确写法: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);
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);
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);
}
}