我有一个像
这样的字符串> 12.4N-m/kg.
从上面的字符串我需要得到一个值12.4
。
当我使用替换所有函数str.replaceAll("[^.0-9]", "")
时。
当字符串有两个点时,这不起作用。
浮点值的位置可能不同。
答案 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+)?");