Stringをデフォルト値でintに解析するにはどうすればよいですか?

2017年08月03日に質問されました。  ·  閲覧回数 14.4k回  ·  ソース

Krunal picture
2017年08月03日

Integer.parseInt(String s)を使用したため、文字列のユーザーIDを整数に解析する必要がありますが、文字列に10進数/整数以外の値がある場合は、null / nilが返されます。その場合は、デフォルトの整数を割り当てる必要があります。 0としての値。

これを試しましたが、 (? 0)が機能していないようで、正しい構文かどうかわかりません。

String userid = "user001";
int int_userid = Integer.parseInt(userid) ? 0;

null割り当てがある場合、どのようにしてデフォルト値を整数に割り当てることができますか?

文字列useridは、Webサービス関数呼び出しの一部としてのパラメーター引数であるため、データ型を整数に更新できません。

回答

msfoster picture
2017年08月03日
19

すでにapache.commons.lang3を使用している可能性があります。

NumberUtils.toInt(str, 0);
Yannick picture
2017年08月03日
10

この構文はInteger.parseInt()では機能しません。これは、結果がNumberFormatException

あなたはそれを次のように扱うことができます:

String userid = "user001";
int int_userid;
try {
   int_userid = Integer.parseInt(userid);
} catch(NumberFormatException ex) {
   int_userid = 0;
}

変数名はJavaコード規約に準拠していないことに注意してください


より良い解決策は、これのために独自のメソッドを作成することです。なぜなら、それは複数回必要になると確信しているから

public static int parseToInt(String stringToParse, int defaultValue) {
    try {
       return Integer.parseInt(stringToParse);
    } catch(NumberFormatException ex) {
       return defaultValue; //Use default value if parsing failed
    }
}

次に、次のようにこのメソッドを使用するだけです。

int myParsedInt = parseToInt("user001", 0);

「user001」は解析できないため、この呼び出しはデフォルト値0返します。

文字列から「user」を削除してメソッドを呼び出すと...

int myParsedInt = parseToInt("001", 0);

…その後、intは先行ゼロを持つことができないため、解析は成功し、 1を返します。

mgyongyosi picture
2017年08月05日
6

少し過剰なエンジニアリングかもしれませんが、GuavaのInts.tryParse(String)をJava8のオプションで次のように使用できます。

int userId = Optional.ofNullable(Ints.tryParse("userid001")).orElse(0)
YCF_L picture
2017年08月03日
5

次のようにString::matchesこの方法を使用できます:

String userid = "user001";
int int_userid = userid.matches("\\d+") ? Integer.parseInt(userid) : 0;

また、正の値と負の値の両方に-?\d+を使用することもできます。

int int_userid = userid.matches("-?\\d+") ? Integer.parseInt(userid) : 0;
xenteros picture
2017年08月03日
2

私はあなたが次の方法であなたが望むことを達成できると信じています:

public static int parseIntWithDefault(String s, int default) {
    try {
        return Integer.parseInt(s);
    } catch(NumberFormatException e) {
        return default;
    }
}

そして今、ただ割り当てます:

int int_userid = parseIntWithDefault(userId, 0);

Javaを使用する場合は、コードのフォーマットに関するJavaのグッドプラクティスを使用する必要があることに注意してください。 int_useridは間違いなく改善すべきものです。

dev_kd picture
2017年08月03日
2

このメソッドは正規表現で試すことができます。

public static int parseWithDefault(String s, int defaultVal) {
    return s.matches("-?\\d+") ? Integer.parseInt(s) : defaultVal;   
}
xoX Zeus Xox picture
2017年08月03日
0
String userid = "user001";
int int_userid = Integer.parseInt(userid) != null ? Integer.parseInt(userid) : 0);

この構文のことですか? しかし、 intnullなることは決してないので、代わりに次のことを行う必要があります。

String userid = "user001";
int int_userid;
try { 
    int_userid= Integer.parseInt(userid);
} catch (NumberFormatexception e) {
    int_userid = 0;
}
deepakl picture
2017年08月03日
-2
int int_userid;
try {
    int_userid = Integer.parseInt(userid); // try to parse the given user id
} catch (Exception e) {   // catch if any exception
    int_userid = 0; // if exception assign a default value
}