我有一个字符串
> 12.4N-m/kg.
从上面的字符串我需要得到一个值12.4
。
当我使用替换所有功能时str.replaceAll("[^.0-9]", "")
。
当字符串有两个点时,这不起作用。
浮点值的位置可能不同。
首先丢弃所有非浮点字符,然后像这样转换为浮点数:
float f = Float.valueOf("> 12.4N-m/kg.".replaceAll("[^\\d.]+|\\.(?!\\d)", ""));
// now f = 12.4
假设您的输入总是在数字之前和之后有一个空格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)));
}
尝试使用这个:
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+)?");