2016-03-09 32 views
-2

是否有一个有效的/清洁的方式,以确定是否String包含字符的序列,其可被解释为:))如果一个)整数b双C a或b唐不适用那么这是一个字母数字?确定是一个字符串是整数或双或纯字符串

+0

@Jens:哪个? – Jim

+0

@Jim Integer.valueof(..),Double.valueOf(..) – Jens

+0

@Jens:我知道如何将字符串转换为整数或双精度。我问如何确定一个字符串是否包含一个有效的整数或双精度的序列。 – Jim

回答

4

是。您可以使用方法:

String text = "1000"; 
try { 
    Integer.valueOf(text); 
} catch (NumberFormatException ex) { 
    System.out.println("not integer"); 
} 
try { 
    Double.valueOf(text); 
} catch (NumberFormatException ex) { 
    System.out.println("not double"); 
} 
0
if ((variable == Math.floor(variable)) && !Double.isInfinite(variable)) { 
    // ... 
} 
2

这取决于你是否要支持区域设置或不。

所以,你有两个选择:

  1. 不要使用语言环境

    • 试试看的Integer.parseInt和Double.parseDouble
  2. 检查特定于语言环境/语言

    • 利用格局检查或NumberFormat的
1

假设你的号码都写在平时的编程语言的形式(例如小数点分隔符是点等),你可以尝试使用正则表达式:

import java.util.regex.Pattern; 

class Test { 

    private static String typeOfThing(String text) { 
    if (Pattern.matches("[+-]?[0-9]+", text)) { 
     return "integer"; 
    } else if (Pattern.matches("[+-]?(([0-9]+\\.[0-9]+)|([0-9]+(\\.[0-9]+)?e[+-]?[0-9]+))", text)) { 
     return "double"; 
    } else return "other"; 
    } 

    public static void main(String[] args) { 
    System.out.println(typeOfThing("+123")); // integer 
    System.out.println(typeOfThing("123")); // integer 
    System.out.println(typeOfThing("-123")); // integer 
    System.out.println(typeOfThing("123.456")); // double 
    System.out.println(typeOfThing("-1.123e-10")); // double 
    System.out.println(typeOfThing("123hello")); // other 
    } 
} 

以上仅仅是一个概念证明,倒是科学记数法,但可能会丢失一些边缘的情况下(例如NaN小号等)。顺便提一下,Java自己的十进制解析器是intense

+0

您还需要在例如123.456e + 123。 –

+0

修好了,谢谢指出! – Vlad

+1

当然,问题不明确的是他是问一个字符串在词法上是整数还是双精度,还是它实际上可以适用于Java类型的整数或双精度。 –

0

使用该知道,如果给定的字符串是一个整数或不

注:它将为bigintegers返回true太

entered_string.matches("\\d+") 

要知道,如果输入的字符串是浮动试试这个

Pattern p = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+$"); 
    Matcher m = p.matcher(entered_string); 

,如果你想知道,如果给定的字符串是只是一个字符串试试这个

Pattern p = Pattern.compile("^[a-zA-Z]*$"); 
    Matcher m = p.matches(entered_string);//as you requested for plain text 
相关问题