如何从字符串中获取浮点值
我有一个字符串
> 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+)?");