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

我有一个字符串

> 12.4Nm/kg. 

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

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

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

浮点值的位置可能不同。

首先丢弃所有非flot字符,然后转换为Float,如下所示:

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

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

 String t = "> 12.4Nm/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))); } 

试着用这个:

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

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

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

尝试使用此正则表达式

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

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

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

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

 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'; } 

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

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