7

私は次のような文字列を持っています

> 12.4N-m/kg.

上記の文字列から値を取得する必要があります12.4

replace all function を使用するとstr.replaceAll("[^.0-9]", "")

文字列に 2 つのドットがある場合、これは機能しません。

float 値の場所は異なる場合があります。

4

7 に答える 7

11

最初に非浮動文字をすべて破棄してから、次のように浮動小数点に変換します。

float f = Float.valueOf("> 12.4N-m/kg.".replaceAll("[^\\d.]+|\\.(?!\\d)", ""));
// now f = 12.4
于 2012-10-25T10:17:44.027 に答える
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)));
}
于 2012-10-25T10:17:44.583 に答える
0

"> "次のコードは、入力文字列が常にで始まり、適切なfloatプレフィックスが付いていることを前提として機能します。

int i=2;
while(Character.isDigit(str.charAt(i)) || str.charAt(i) == '.') 
    i++;
float answer = Float.valueOf(str.substring(2,i));
于 2012-10-25T10:15:57.413 に答える
0

この正規表現を使用してみてください

^[-+]?[0-9]*\.?[0-9]+$
于 2012-10-25T10:17:25.913 に答える
0

上記のオプションを試しましたが、うまくいきませんでした。以下のパターンを試してください

Pattern pattern = Pattern.compile("\\d+(?:\\.\\d+)?");
于 2015-11-26T05:07:15.523 に答える
0

これを使用してみてください:

Float.valueOf(str.substring(0,4));
于 2012-10-25T10:11:49.897 に答える
0

以前の回答では、次の 2 つの点が省略されていると思います。

  • これよりも複雑な数があります。
  • 浮動小数点数に収まらない桁が単位にある可能性があります。

2番目の点のため、数字以外のものをすべて置き換えることは良い考えではないと思います。文字列の最初の数字を検索する必要があります。

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'; 
}       
于 2012-10-25T15:56:24.050 に答える