[[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 関数の定義と変数のスコープ]]};

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   一覧 単語検索 最終更新     最終更新のRSS