2020.10.29
文字列
文字数字を数値に変換
"12345678" → 12345678 "-230091" → -230091
Integer.parseIntメソッド
public int parseInt( String s )
・文字列の引数を符号付き10進数の整数型として構文解析します。 パラメータ s : 整数の値にに変換する文字列の値 戻り値 int型の整数
Integer.valueOfメソッド
public static Integer valueOf( String s )
・指定されたStringの値を保持するIntegerオブジェクトを返します。 パラメータ s : 整数(Integerクラス)に変換する文字列の値 戻り値 Integerクラスの整数の値
ここで説明するのは、上記のようなメソッドの作り方です。
code[ 0 ] = 49; // '1'のASCIIコード code[ 1 ] = 50; // '2'のASCIIコード code[ 2 ] = 56; // '8'のASCIIコード code[ 3 ] = 55; // '7'のASCIIコード
となります。各文字をASCIIコードに変換された値を格納します。
int result = 0; result = (int)code[ 0 ] - 48; // resultの値 : 1 result = ( result * 10 ) + (int)code[ 1 ] - 48; // resultの値 : 12 result = ( result * 10 ) + (int)code[ 2 ] - 48; // resultの値 : 128 result = ( result * 10 ) + (int)code[ 3 ] - 48; // resultの値 : 1287
また、以下のように48の代わりに'0'を直接ソースコードに書いて計算させることもできます。
int result = 0; result = (int)code[ 0 ] - '0'; // resultの値 : 1 result = ( result * 10 ) + (int)code[ 1 ] - '0'; // resultの値 : 12 result = ( result * 10 ) + (int)code[ 2 ] - '0'; // resultの値 : 128 result = ( result * 10 ) + (int)code[ 3 ] - '0'; // resultの値 : 1287
static int parseInt10( String str )が作成したメソッドで、文字列の最初の文字が'+'、'-'の場合の処理も記載しています。また、数字以外の文字がある場合、符号が数字の途中に有る場合など変換に失敗したときに結果をint型で持てる最小値-2147483648を戻すようにしています。
StringtoValue10.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109
public class StringtoValue10 { // 文字列を10進数に変換 // エラーの場合、int型の最小値"Integer.MIN_VALUE"を戻す static int parseInt10( String str ) { // 文字数を取得 int len = str.length(); // 文字数が1未満の場合、intの最小値を戻す if ( 1 > len ) return Integer.MIN_VALUE; // 文字列をbyte配列に変換 byte[] code = str.getBytes(); // 整数の符号の初期化(-1:'-' 1:'+') int sign = 1; // 結果格納用の変数 int result = 0; // 変換するループ for ( int i = 0; i < len; i++ ) { switch ( code[ i ] ) { case '-': // マイナス符号の処理 // 文字列の途中に'-'が有る if ( 0 != i ) return Integer.MIN_VALUE; // '-'だけの文字列 if ( 2 > len ) return Integer.MIN_VALUE; // 符号を'-'にする sign = -1; break; case '+': // プラス符号の処理 // 文字列の途中に'+'が有る if ( 0 != i ) return Integer.MIN_VALUE; // '+'だけの文字列 if ( 2 > len ) return Integer.MIN_VALUE; // 符号を'+'にする sign = 1; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': // 数字の処理の処理 // 桁を1桁増やす result *= 10; // code[i]の値を整数にキャストして足す result += (int)( (byte)code[ i ] - '0' ); break; default: // 数字と符号以外の文字の場合 return Integer.MIN_VALUE; } } // 最後に符号を掛けて戻す return result * sign; } // メイン public static void main( String[] args ) { // 結果を格納する変数 int result; // 変換結果出力 result = parseInt10( "1234567" ); System.out.println( result ); result = parseInt10( "-99999" ); System.out.println( result ); result = parseInt10( "+8888" ); System.out.println( result ); result = parseInt10( "-" ); System.out.println( result ); result = parseInt10( "+" ); System.out.println( result ); result = parseInt10( "678+9" ); System.out.println( result ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis StringtoValue10.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac StringtoValue10.java
実行
C:\talavax\javasample>java StringtoValue10
実行結果
1234567 -99999 8888 -2147483648 -2147483648 -2147483648
以上です。