文字列の16進値を整数値に解析する必要があります。このような:
String hex = "2A"; //The answer is 42
int intValue = Integer.parseInt(hex, 16);
しかし、間違った16進値(たとえば「LL」)を挿入すると、java.lang.NumberFormatException: For input string: "LL"
どうすればそれを回避できるか(たとえば、0を返す)が得られますか?
trycatchブロックで囲みます。これが例外処理の仕組みです。-
int intValue = 0;
try {
intValue = Integer.parseInt(hex, 16);
} catch (NumberFormatException e) {
System.out.println("Invalid Hex Value");
// intValue will contain 0 only from the default value assignment.
}
入力文字列の場合: "LL"どうすれば回避できますか(たとえば、0を返します)?
例外をキャッチし、intvalueにゼロを割り当てるだけです
int intValue;
try {
String hex = "2A"; //The answer is 42
intValue = Integer.parseInt(hex, 16);
}
catch(NumberFormatException ex){
System.out.println("Wrong Input"); // just to be more expressive
invalue=0;
}
例外をキャッチして、代わりにゼロを返すことができます。
public static int parseHexInt(String hex) {
try {
return Integer.parseInt(hex, 16);
} catch (NumberFormatException e) {
return 0;
}
}
ただし、0 も有効な 16 進数であり、 などの無効な入力を意味しないため、アプローチを再評価することをお勧めします"LL"
。
どうすれば回避できますか (たとえば、0 を返す)
万一return 0
の場合の簡単な方法でNumberFormatException
public int getHexValue(String hex){
int result = 0;
try {
result = Integer.parseInt(hex, 16);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return result;
}
例外をキャッチしてデフォルト値を設定するだけです。ただし、try
ブロックの外側で変数を宣言する必要があります。
int intValue;
try {
intValue = Integer.parseInt(hex, 16);
} catch (NumberFormatException e) {
intValue = 0;
}
初期化式 (変数など) を使用して値を設定する必要がある場合はfinal
、ロジックをメソッドにパッケージ化する必要があります。
public int parseHex(String hex) {
try {
return Integer.parseInt(hex, 16);
} catch (NumberFormatException e) {
return 0;
}
}
// elsewhere...
final int intValue = parseHex(hex);