1

私はテキスト(文字列)を持っています、それから数字だけを取得する必要があります、つまり私がテキストを持っている場合:

「私は53.2km離れています」、「53.2」を取得したい(532、53、2ではありません)

Javaで文字列から数字を抽出するという解決策を試しました。「532」が返されます。

誰かがそれについての考えを持っていますか?

ありがとう

4

6 に答える 6

9

以下のとメソッドを持つScannerを直接使用できます。nextDouble()hasNextDouble()

        Scanner st = new Scanner("I'm 53.2 km away");
        while (!st.hasNextDouble())
        {
            st.next();
        }
        double value = st.nextDouble();
        System.out.println(value);

出力: 53.2

于 2012-06-10T18:18:49.207 に答える
3

テスター付きの優れた正規表現サイトは次のとおりです。

http://gskinner.com/RegExr/

これはうまくいきます\d+\.?\d+

于 2012-06-10T18:10:48.710 に答える
3
import java.util.regex.*;

class ExtractNumber
{
    public static void main(String[] args)
    {
        String str = "I'm 53.2 km away";
        String[] s = str.split(" ");
        Pattern p = Pattern.compile("(\\d)+\\.(\\d)+");
        double d;
        for(int i = 0; i< s.length; i++)
        {
            Matcher m = p.matcher(s[i]);
            if(m.find())
                d = Double.parseDouble(m.group());
        }
        System.out.println(d);
    }
}
于 2012-06-10T18:14:28.180 に答える
1

最も簡単な方法は、正規表現と replaceAll 文字列メソッドを使用することです。例えば

String a = "2.56 Kms";

String b = a.replaceAll("\\^[0-9]+(\\.[0-9]{1,4})?$","");

Double c = Double.valueOf(b);

System.out.println(c);
于 2014-08-16T08:07:32.690 に答える
0

getDoubleFromString メソッドを作成しました。私はそれが最善の解決策ではないと思いますが、うまくいきます!

public static double getDoubleFromString(String source) {
        if (TextUtils.isEmpty(source)) {
            return 0;
        }

        String number = "0";
        int length = source.length();

        boolean cutNumber = false;
        for (int i = 0; i < length; i++) {
            char c = source.charAt(i);
            if (cutNumber) {
                if (Character.isDigit(c) || c == '.' || c == ',') {
                    c = (c == ',' ? '.' : c);
                    number += c;
                } else {
                    cutNumber = false;
                    break;
                }
            } else {
                if (Character.isDigit(c)) {
                    cutNumber = true;
                    number += c;
                }
            }
        }
        return Double.parseDouble(number);
    }
于 2014-11-26T08:40:19.653 に答える
0

数値が「単語」(スペースで区切られている) であることが確実であり、正規表現を使用したくない場合は、それらを解析することができます...

String myString = "I'm 53.2 km away";
List<Double> doubles = new ArrayList<Double>();
for (String s : myString.split(" ")) {
    try {
        doubles.add(Double.valueOf(s));
    } catch (NumberFormatException e) {
    }
}
于 2012-06-10T18:18:09.940 に答える