如何判断一个字符串里的数字是整数还是小数

叶子丨风 2013-08-02 04:49:21
例:
String a = "1235.2342";
String b = "782";
String c = "ss123";

可以用下面进行判断是否是数值,但是能不能判断出 如果是数值,就返回是什么类型呢(int 或者 double)。

//判断是否是字符
public static boolean isNum(String str){
return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");
}
...全文
4779 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
末日哥 2013-08-02
  • 打赏
  • 举报
回复
我把0放到了浮点型
lkq_david 2013-08-02
  • 打赏
  • 举报
回复
引用 16 楼 q249312560 的回复:
[quote=引用 13 楼 qq1145174853 的回复:] [quote=引用 12 楼 q249312560 的回复:] [quote=引用 10 楼 qq1145174853 的回复:] [quote=引用 9 楼 q249312560 的回复:] [quote=引用 7 楼 qq1145174853 的回复:] 能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。[/quote] 如果是数值的话,你再利用indexOf(".")来判断是int 或者 double,你这个就不是数值呀[/quote] 呃。。是这样的 d="1992.04.06" 这样的。。不能用indexOf()来判断[/quote] 1992.04.06这个也不是数值吧?[/quote] 哦 明白了 是判断出来是否是数值后 然后用 if(indexOf(".") == -1){return int}else{return int} 明白了。。脑子好混。。[/quote] 有的时候累了就该出去转一圈,老在那边想会钻牛角尖的,很高兴帮助到你了,记得给分呀
叶子丨风 2013-08-02
  • 打赏
  • 举报
回复
引用 13 楼 qq1145174853 的回复:
[quote=引用 12 楼 q249312560 的回复:] [quote=引用 10 楼 qq1145174853 的回复:] [quote=引用 9 楼 q249312560 的回复:] [quote=引用 7 楼 qq1145174853 的回复:] 能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。[/quote] 如果是数值的话,你再利用indexOf(".")来判断是int 或者 double,你这个就不是数值呀[/quote] 呃。。是这样的 d="1992.04.06" 这样的。。不能用indexOf()来判断[/quote] 1992.04.06这个也不是数值吧?[/quote] 哦 明白了 是判断出来是否是数值后 然后用 if(indexOf(".") == -1){return int}else{return int} 明白了。。脑子好混。。
末日哥 2013-08-02
  • 打赏
  • 举报
回复
		String str = "ss0.11";
		Pattern pattern = Pattern.compile("^-?[1-9]\\d*$");
		Matcher matcher = pattern.matcher(str);
		if(matcher.find()) {
		    System.out.println("整形");
		}else if(Pattern.compile("^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$").matcher(str).find()){
			System.out.println("浮点型");
		}else {
			System.out.println("字符型");
		}
chenchenchenliu 2013-08-02
  • 打赏
  • 举报
回复
 /**
	  * 正则表达式可能不严谨(写的比较唐突)
	  * @param source
	  * @return 返回0表示非数值,返回1表示是int型,返回2表示是double型
	  */
	 public static int type(String source){
		 int result = 0;
		 String regex1 = "^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$";
		 boolean flag1 = source.matches(regex1);
		 if(flag1){
			 String regex2 = "^[-+]?([0-9]+)$";
			 boolean flag2 = source.matches(regex2);
			 if(flag2){
				 result = 1;
			 }
			 else{
				 result = 2;
			 }
		 }
		 return result;		 
	 }
楼主试试效果吧,写的比较唐突,在我这里实验,a,b,c三个字符串分别返回2,1,0 。
lkq_david 2013-08-02
  • 打赏
  • 举报
回复
引用 12 楼 q249312560 的回复:
[quote=引用 10 楼 qq1145174853 的回复:] [quote=引用 9 楼 q249312560 的回复:] [quote=引用 7 楼 qq1145174853 的回复:] 能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。[/quote] 如果是数值的话,你再利用indexOf(".")来判断是int 或者 double,你这个就不是数值呀[/quote] 呃。。是这样的 d="1992.04.06" 这样的。。不能用indexOf()来判断[/quote] 1992.04.06这个也不是数值吧?
叶子丨风 2013-08-02
  • 打赏
  • 举报
回复
引用 10 楼 qq1145174853 的回复:
[quote=引用 9 楼 q249312560 的回复:] [quote=引用 7 楼 qq1145174853 的回复:] 能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。[/quote] 如果是数值的话,你再利用indexOf(".")来判断是int 或者 double,你这个就不是数值呀[/quote] 呃。。是这样的 d="1992.04.06" 这样的。。不能用indexOf()来判断
lkq_david 2013-08-02
  • 打赏
  • 举报
回复
引用 9 楼 q249312560 的回复:
[quote=引用 7 楼 qq1145174853 的回复:] 能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。[/quote] 你举的这个例子,它不是数值,不是直接返回是string类型了么,根本就不往下走了呀
lkq_david 2013-08-02
  • 打赏
  • 举报
回复
引用 9 楼 q249312560 的回复:
[quote=引用 7 楼 qq1145174853 的回复:] 能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。[/quote] 如果是数值的话,你再利用indexOf(".")来判断是int 或者 double,你这个就不是数值呀
叶子丨风 2013-08-02
  • 打赏
  • 举报
回复
引用 7 楼 qq1145174853 的回复:
能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
不能用indexOf来判断。。万一字符串内容是 String d = "123.helloword.oracle.text.txt"; 就不能用indexOf来判断了。。
叶子丨风 2013-08-02
  • 打赏
  • 举报
回复
引用 6 楼 rencht 的回复:
你不是都有俩方法了么,
public static int checkString(String str) {
    if (isDigits(str))
        return 1;
    else if (isNum(str))
        return 2;
    else
        return 0;
}
我那个方法是判断是否是数值。。你那个是判断是否是整数,还没有判断是否是小数的正则。。脑子好抽。。总是想不明白。。我自己的正则是整数也可以,小数也可以。。好纠结啊。。小数的正则。。不就是加个点么。。啊啊啊啊 !! 疯掉。。脑子脑子。。帮我整理下吧。。明天要好好睡一觉。。糊涂了。。
lkq_david 2013-08-02
  • 打赏
  • 举报
回复
能判断出来是不是数值就好办了,如果不是数值就返回是字符串类型,如果是数值的话,你再利用indexOf(".")来判断是int 或者 double
rencht 2013-08-02
  • 打赏
  • 举报
回复
你不是都有俩方法了么,
public static int checkString(String str) {
    if (isDigits(str))
        return 1;
    else if (isNum(str))
        return 2;
    else
        return 0;
}
叶子丨风 2013-08-02
  • 打赏
  • 举报
回复
引用 1 楼 rencht 的回复:
判断是整数,
public static boolean isDigits(String str) {
	return str.matches("[-+]?[0-9]*");
}
我想返回一个double 或者 int 的标记,直接判断出来的。例如: 如果是 整形 return 1; 如果是 double return 2; 如果只是字符串 return 0;这样的。。能帮帮我么。
小行星0906 2013-08-02
  • 打赏
  • 举报
回复
soory,我错了,坐看,自己算法比较笨
叶子丨风 2013-08-02
  • 打赏
  • 举报
回复
在线坐等。。。求解决。。苦逼程序猿,脑子不知道怎么了,发抽,怎么都想不明白了。。
小行星0906 2013-08-02
  • 打赏
  • 举报
回复

	/**
	 * 判断字符串是否为数字
	 * 
	 * @param string
	 * @return boolean
	 */
	public static boolean isNumber(String string)
	{
		for (int i = 0; i < string.length(); i++)
		{
			if (!Character.isDigit(string.charAt(i)))
			{
				return false;
			}
		}
		return true;
	}
rencht 2013-08-02
  • 打赏
  • 举报
回复
判断是整数,
public static boolean isDigits(String str) {
	return str.matches("[-+]?[0-9]*");
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧