- 追加された行はこの色です。
- 削除された行はこの色です。
[[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 関数の定義と変数のスコープ]]};