24

次のような文字列の整数部分を抽出するための最良の方法は何ですか

Hello123

どうやって123の部分を手に入れますか。Javaのスキャナーを使用してハックすることができますが、より良い方法はありますか?

4

8 に答える 8

43

前に説明したように、正規表現を使用してみてください。これは役立つはずです:

String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123

そして、そこからそれをint(または整数)に変換します。

于 2009-12-14T21:32:13.723 に答える
26

私はあなたが次のようなことをすることができると信じています:

Scanner in = new Scanner("Hello123").useDelimiter("[^0-9]+");
int integer = in.nextInt();

編集:CarlosによるuseDelimiterの提案を追加

于 2009-12-14T20:27:08.833 に答える
11

正規表現を使用して、文字列の必要な部分に一致させてみませんか?

[0-9]

必要なのはそれだけで、それに必要な周囲の文字もすべてです。

http://www.regular-expressions.info/tutorial.htmlを見て、正規表現がどのように機能するかを理解してください。

編集:他の提出者が投稿したコードが実際に機能する場合、この例では正規表現が少しやり過ぎかもしれないと言いたいです...しかし、正規表現は非常に強力であり、私が認めたい以上に重宝します(彼らにショットを与える前に数年待った後)。

于 2009-12-14T20:26:12.670 に答える
4

Michaelの正規表現が可能な限り最も単純な解決策だと思っていましたが、Matcher.matches()の代わりにMatcher.find()を使用すると、「\d+」だけが機能します。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {

    public static void main(String[] args) {
        String input = "Hello123";
        int output = extractInt(input);

        System.out.println("input [" + input + "], output [" + output + "]");
    }

    //
    // Parses first group of consecutive digits found into an int.
    //
    public static int extractInt(String str) {
        Matcher matcher = Pattern.compile("\\d+").matcher(str);

        if (!matcher.find())
            throw new NumberFormatException("For input string [" + str + "]");

        return Integer.parseInt(matcher.group());
    }
}
于 2009-12-15T04:57:48.000 に答える
4

末尾の数字が必要な場合、これは機能します。

import java.util.regex.*;

public class Example {


    public static void main(String[] args) {
        Pattern regex = Pattern.compile("\\D*(\\d*)");
        String input = "Hello123";
        Matcher matcher = regex.matcher(input);

        if (matcher.matches() && matcher.groupCount() == 1) {
            String digitStr = matcher.group(1);
            Integer digit = Integer.parseInt(digitStr);
            System.out.println(digit);            
        }

        System.out.println("done.");
    }
}
于 2009-12-14T21:45:23.593 に答える
4

6年前の質問であることは知っていますが、今は正規表現の学習を避けたい人のために回答を投稿しています(ところで、これを行う必要があります)。このアプローチでは、数字の間に数字も表示されます(たとえば、HP 123 KT 567は123567を返します)

    Scanner scan = new Scanner(new InputStreamReader(System.in));
    System.out.print("Enter alphaNumeric: ");
    String x = scan.next();
    String numStr = "";
    int num;

    for (int i = 0; i < x.length(); i++) {
        char charCheck = x.charAt(i);
        if(Character.isDigit(charCheck)) {
            numStr += charCheck;
        }
    }

    num = Integer.parseInt(numStr);
    System.out.println("The extracted number is: " + num);
于 2016-08-27T16:25:20.323 に答える
2

これは私にとって完璧に機能しました。

    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher("string1234more567string890");
    while(m.find()) {
        System.out.println(m.group());
    }

出力:

1234
567
890
于 2019-10-27T07:33:25.760 に答える
0
String[] parts = s.split("\\D+");    //s is string containing integers
int[] a;
a = new int[parts.length];
for(int i=0; i<parts.length; i++){
a[i]= Integer.parseInt(parts[i]);
System.out.println(a[i]);
} 
于 2018-10-17T19:28:12.840 に答える