7

我有一个字符串

> 12.4N-m/kg.

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

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

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

浮点值的位置可能不同。

4

7 回答 7

11

首先丢弃所有非浮点字符,然后像这样转换为浮点数:

float f = Float.valueOf("> 12.4N-m/kg.".replaceAll("[^\\d.]+|\\.(?!\\d)", ""));
// now f = 12.4
于 2012-10-25T10:17:44.027 回答
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)));
}
于 2012-10-25T10:17:44.583 回答
0

尝试使用这个:

Float.valueOf(str.substring(0,4));
于 2012-10-25T10:11:49.897 回答
0

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

int i=2;
while(Character.isDigit(str.charAt(i)) || str.charAt(i) == '.') 
    i++;
float answer = Float.valueOf(str.substring(2,i));
于 2012-10-25T10:15:57.413 回答
0

尝试使用这个正则表达式

^[-+]?[0-9]*\.?[0-9]+$
于 2012-10-25T10:17:25.913 回答
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'; 
}       
于 2012-10-25T15:56:24.050 回答
0

我已经尝试了上述选项但对我不起作用,请尝试以下模式

Pattern pattern = Pattern.compile("\\d+(?:\\.\\d+)?");
于 2015-11-26T05:07:15.523 回答