10


2

文字列「600sp」の整数部分を取得する最良の方法は?

「600sp」という文字列があり、そこから整数部分(600)を取得したい。

`Integer.valueOf(" 600sp ")`を実行すると、文字列で検出された数値以外の値 "s"により例外が発生します。

整数部分を取得するための最速のクリーンな方法は何ですか?

ありがとうございます。

6 Answer


15


文字列形式が常に数字の後にいくつかの文字が続く場合は、これを試してください

mystr.split("[a-z]")[0]


7


入力の制約によっては、正規表現が最適な場合があります。

    Pattern p = Pattern.compile("(\\d+)");
    Matcher m = p.matcher("600sp");
    Integer j = null;
    if (m.find()) {
        j = Integer.valueOf(m.group(1));
    }

この正規表現は、「少なくとも1桁ある文字列の先頭にある連続した数字のセットを教えてください」と解釈されます。 整数ではなく実数の解析のような他の制約がある場合は、コードを変更する必要があります。


3


より短く、具体性の低いソリューションの場合は、コンテキストを追加します。

StringBuffer numbers = new StringBuffer();
for(char c : "asdf600sp".toCharArray())
{
  if(Character.isDigit(c)) numbers.append(c);
}

System.out.println(numbers.toString());

新しい情報に照らして、改善されたソリューション:

Integer.valueOf("600sp".replace("sp",""));


2


あなたが使用することができます

Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1"))

'' '' '

注意:

この正規表現を使用すると、初期番号のみが保持されます。

'' '' '

編集: `" 0 "+`は、数字がないときにクラッシュしないようにするために使用されます。 Tks @jherico!


2


これはすでに回答済みですが、http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html [java.util.Scanner ]? 正規表現やその他のより複雑な文字列ユーティリティなしで、法案に完全に適合するようです。


1


文字列が「sp」が後に続く整数であることが保証されている場合、より一般的な正規表現パーサーを使用することはお勧めしません。

「sp」で終わるかどうかをテストし、最後の2文字なしで部分文字列を解析します。