[[TopPage]] > [[演習課題]] > 演習1-5 演習1-5では,2つのプログラムファイルについて見ていきます. * 文字列と数値の型変換 [#s5c861c9] まず,下記のプログラムをダウンロードしてください. &ref(NumStrTest.java,,,NumStrTest.java ダウンロード);/[[ソースコードファイルを見る>http://yoslab.net/netprog/source/NumStrTest.java]] ** 数値型から文字列型への変換 [#y7467d9c] 数値型から文字列型に変換するには,暗黙的に変換される場合と,変換コードを明示的に記述する場合とがあります. *** 暗黙的に変換される場合 [#aa0324f0] 文字列と数値を結合する場合などは,変換コードを記述しなくても変換されます. int numberten = 10; System.out.println("Number "+ numberten); ただし,数値同士を+記号で結合しようとしても,足し算と認識されてしまいます. System.out.println(3 + 9); // 39ではなく,足し算結果の12になる. *** 明示的に変換コードを記述する場合 [#b6a8212c] 数値型を文字列型に変換する場合のコードは,次のとおりです. int numberten = 10; String str = Integer.toString(numberten); ''Integer.toString(''[数値型の変数]'')''のように記述する必要があります. - String ''Integer.toString''(''[数値型の変数]'')''~ ''[数値型の変数]''の値を文字列にして返します. &color(red,yellow){''裏ワザ''};~ 空文字列との「結合」を利用すると,暗黙的な変換ができます. int number = 50; String str = "" + number; ** 文字列型から数値型への変換 [#jc1e521b] 文字列型から数値型への変換は,明示的に記述しなければなりません. 変換する数値がint型の場合は,以下のとおりです. String strint = "1234"; int inum = Integer.parseInt(strint); - int ''Integer.parseInt''(''[文字列]'')''~ ''[文字列]''の値をint型にして返します. 変換する数値が実数の場合(Double型にする場合)は,以下のようになります. String strfloat = "1234.56"; double fnum = Double.parseDouble(strfloat); - Double ''Double.parseDouble''(''[文字列]'')''~ ''[文字列]''の値をDouble型にして返します. &color(red,yellow){''注意点''}; ~ 文字列型から数値型への変換は,どのような文字列でも変換できるとは限りません. %%%変換できない文字が含まれている場合,プログラムエラー(例外)が発生します.%%% **練習 [#n22aa4d0] *** 確認練習1 [#maa31e2b] 文字列型から数値型への変換で,わざと数値でない文字列を作り,エラーを発生させてみましょう. 例)strintの値に「文字」を追加する String strint = "1234abc"; すると,次のようなエラーが発生し,エラーが出た行でプログラムが停止してしまいます. Exception in thread "main" java.lang.NumberFormatException: For input string: "1234abc" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at NumStr.main(NumStr.java:18) *** 確認練習2 [#qef5db7c] エラーをキャッチする構文(try-catch文)を導入してみましょう. ソースコードを以下のように書き換えてください. // 文字列型から数値型への変換 System.out.println("int型の変換"); String strint = "1234"; // 数値でない文字列に変えて試してみてください. //エラーが出る可能性がある文 try { int inum = Integer.parseInt(strint); System.out.println(inum); //エラーが発生した時の処理 } catch (NumberFormatException ex) { System.out.println(strint + "は数値に変換できません!!"); } * 文字列の分割(Split) [#p83335d8] * 文字列の分割(split) [#p83335d8] まず,下記のプログラムをダウンロードしてください. &ref(SplitTest.java,,,SplitTest.java ダウンロード);/[[ソースコードファイルを見る>http://yoslab.net/netprog/source/SplitTest.java]] ネットワークプログラムなどでは,次のようなスペース文字やタブ文字,カンマで区切られたデータ(文字列)をやりとりすることがあります. GET 5 5 1 MOVE 4 5 0 これらのデータ集合から,個々のデータを配列で取得するには,''Split()''関数を使うと便利です. これらのデータ集合から,個々のデータを配列で取得するには,''split()''関数を使うと便利です. String text = "GET 5 5 1"; // Splitを使って命令を分割する String[] data = text.split(" "); // 分割した個々の要素を1行ずつ表示する. for (int i=0; i<data.length; i++) { System.out.println(data[i]); } 配列の要素数は,'''配列型'''.''length''で取得することができます. - String[] String.''split''(''[文字列]'')''~ 文字列を指定の文字(''[文字列]'')で分割し,配列にします.~ 返り値が配列になることに注意してください. 上記の例ですと,data[0]に"GET",data[1]に"5",…が代入されます.~ 文字列を取り出す,という意味では[[演習1-4>演習1-4 文字列(String)型]]のsubstringと似ていますね.区別をしましょう. また,配列の要素数は,'''配列型'''.''length''で取得することができます. #br &size(16){[[&ref(http://yoslab.net/netprog/next.gif,nolink); 次の演習(1-6)>演習1-6 関数の定義と変数のスコープ]]};