文字列で整数部品を抽出します
-
19-09-2019 - |
質問
文字列の整数部分を次のように抽出する最良の方法は何ですか
Hello123
どのようにして123パートを取得しますか。 Javaのスキャナーを使用してハックすることができますが、より良い方法はありますか?
解決
正規表現を使用して、必要な文字列の部分を一致させてみませんか?
[0-9]
必要なのはそれだけでなく、それが必要とする周囲の請求が何であれ。
見る http://www.regual-expressions.info/tutorial.html 正規表現がどのように機能するかを理解する。
編集:他の提出者が実際に投稿したコードが実際に作品を投稿した場合、Regexはこの例ではRegexが少し船外であるかもしれないと言いたいのですが、それでもRegexを学ぶことをお勧めします。私が認めたい以上に役立つでしょう(ショットを与える前に数年待った後)。
他のヒント
前に説明したように、正規表現を使用してみてください。これは助けになるはずです:
String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123
そして、それをそこからint(または整数)に変換するだけです。
私はあなたが次のようなことができると信じています:
Scanner in = new Scanner("Hello123").useDelimiter("[^0-9]+");
int integer = in.nextInt();
編集:CarlosによるUsedElimiterの提案を追加しました
あなたが後続の数字が必要であると仮定すると、これは動作します:
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.");
}
}
MichaelのRegexは可能な限り最も単純なソリューションであると考えていましたが、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());
}
}
私はそれが6歳の質問であることを知っていますが、私は今、正規表現を避けたい人のために答えを投稿しています(あなたはそれをするべきです)。このアプローチは、数字の間に数字を与えます(例:HPの場合123KT567 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);
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]);
}