如何从字符串中获取浮点值

时间:2012-10-25 10:06:58

标签: java regex

我有一个像

这样的字符串
> 12.4N-m/kg.

从上面的字符串我需要得到一个值12.4

当我使用替换所有函数str.replaceAll("[^.0-9]", "")时。

当字符串有两个点时,这不起作用。

浮点值的位置可能不同。

7 个答案:

答案 0 :(得分:11)

首先丢弃所有非扁平字符,然后像这样转换为Float:

float f = Float.valueOf("> 12.4N-m/kg.".replaceAll("[^\\d.]+|\\.(?!\\d)", ""));
// now f = 12.4

答案 1 :(得分:2)

假设您的输入始终在数字前面有一个空格,在它后面有N

String t = "> 12.4N-m/kg.";
Pattern p = Pattern.compile("^.*\\s(\\d+\\.\\d)N.*$");
Matcher matcher = p.matcher(t);
if (matcher.matches()) {
    System.out.println(Float.valueOf(matcher.group(1)));
}

答案 2 :(得分:0)

尝试使用它:

Float.valueOf(str.substring(0,4));

答案 3 :(得分:0)

以下代码将假设输入字符串始终以"> "开头,并且它具有正确的浮点数前缀。

int i=2;
while(Character.isDigit(str.charAt(i)) || str.charAt(i) == '.') 
    i++;
float answer = Float.valueOf(str.substring(2,i));

答案 4 :(得分:0)

尝试使用此正则表达式

^[-+]?[0-9]*\.?[0-9]+$

答案 5 :(得分:0)

我认为之前的答案遗漏了两点:

  • 有比这更复杂的数字。
  • 单位中可能有一个数字不会在浮动中结束。

由于第二点,我不认为替换所有非数字的东西都是个好主意。人们应该在字符串中搜索第一个数字:

Matcher m = p.matcher(str);
System.out.println("Input: "+ str);
if (m.find()) {
    System.out.println("Found: "+ m.group());
    try {
        System.out.println("Number: "+ Float.parseFloat(m.group()));
    } catch (Exception exc) {
        exc.printStackTrace();
    }
}

或者,您可以执行类似

的操作
int i, j;
for (i = 0; i < str.length(); ++i) {
    if (mightBePartOfNumber(str.charAt(i))) {
        break;  
    }       
}       
for (j = i; j < str.length(); ++j) {
    if (!mightBePartOfNumber(str.charAt(j))) {
        break;  
    }       
}       
String substr = str.substring(i, j);
System.out.println("Found: "+ substr);
try {   
    System.out.println("Number: "+ Float.parseFloat(substr));
} catch (Exception exc) {
    exc.printStackTrace();
}       

带帮助者

private static boolean mightBePartOfNumber(char c) {
    return ('0' <= c && c <= '9') || c == '+' || c == '-' || c == '.' || c == 'e' || c == 'E'; 
}       

答案 6 :(得分:0)

我已经尝试了上述选项,但没有为我工作,请尝试以下模式

Pattern pattern = Pattern.compile("\\d+(?:\\.\\d+)?");