Java 如何从字符串中获取浮点值
我有一根像Java 如何从字符串中获取浮点值,java,regex,Java,Regex,我有一根像 > 12.4N-m/kg. 从上面的字符串中,我需要得到一个值12.4 当我使用replace all函数str.replaceAll(“[^.0-9]”,“”)时 当then字符串有两个点时,这不起作用 浮点值的位置可能不同。尝试使用以下方法: Float.valueOf(str.substring(0,4)); 下面的代码将假定输入字符串总是以“>”开头,并且它有适当的浮点前缀 int i=2; while(Character.isDigit(str.charAt(i)
> 12.4N-m/kg.
从上面的字符串中,我需要得到一个值12.4
当我使用replace all函数str.replaceAll(“[^.0-9]”,“”)时
当then字符串有两个点时,这不起作用
浮点值的位置可能不同。尝试使用以下方法:
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]+$
首先丢弃所有非flot字符,然后按如下方式转换为Float:
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)));
}
我认为前面的答案遗漏了两点:
- 还有比这更复杂的数字
- 单位中可能有一个数字不在浮点数中
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();
}
inti,j;
对于(i=0;i
和助手在一起
private static boolean mightBePartOfNumber(char c) {
return ('0' <= c && c <= '9') || c == '+' || c == '-' || c == '.' || c == 'e' || c == 'E';
}
私有静态布尔值可能是数字的一部分(字符c){
return('0'我已尝试了上述选项,但对我无效,请尝试以下模式
Pattern pattern = Pattern.compile("\\d+(?:\\.\\d+)?");
这里我无法预测位置。它可能不同。请提供更多可能输入的示例。请记住,该单元可能包含一个数字(如m^2)这可能不应该以浮点形式结束。@chs需要做什么才能避免像用于指定m平方的m^2这样的情况?我已经添加了两个关于处理m^2的建议。当数字后面紧跟着一个点时,仍然不起作用。你能解释一下模式[^\\d.]+\\\(?!\\d)的含义吗??如果可能的话,你能解释一下识别给定输入模式的过程吗?当然@Munesh:That regex:[^\\d.]+\124;\.(?!\\ d)
表示它与管道两侧的2个子正则表达式中的一个匹配|
。LHS匹配除数字或perios之外的任何东西,而RHS表示一个周期,该周期后面没有使用负前瞻的数字。谢谢anubhava。如果您在答案中添加此解释,将会很有帮助。很好的答案:)