String型の配列をInt型に変える
一言まとめ
Java8以降では、Stream APIを使って一行でできる。
//Stream APIのインポート
import java.util.stream.Stream;
//String型配列 を int型配列 に変換
int[] int型の配列名 = Stream.of(整数型の配列名).mapToInt(Integer::parseInt).toArray();
【説明】
流れとしては
【メリット】
Java7までの場合は「for文で要素を一つずつ数値型に変換していく」といった書き方だったらしいのですが、Java8からAPIでかなりスッキリ書くことができるようになったらしい。
// java7までの書き方for(inti=0;i<sa.length;i++){ia[i]=Integer.parseInt(sa[i]);}
【使用場面】
体感paizaの問題を解く際は、かなり頻出する操作だと感じました。例えば以下のようなパターンで私はつまりました。
- scanner で「100,200,300」のように区切って入力
- 入力の内容を一度 文字列の配列 として分割する
- 2 をint型の配列 に変換して計算をおこなう
といった感じでした。
以下にその例のサンプルコードを載せておきます。
【サンプルコード】 「scannerで打ち込まれた文字列の配列を数値型に変換」
【Main.java】
// scannerのインポートimportjava.util.Scanner;//Stream APIのインポートimportjava.util.stream.Stream;publicclassMain{publicstaticvoidmain(String[]args){// scannerのインスタンス化Scannersc=newScanner(System.in);// 空白区切りに文字型で要素ごとに配列に分割String[]stringArray=sc.nextLine().split(" ");// String型配列 を int型配列 に変換int[]intArray=Stream.of(stringArray).mapToInt(Integer::parseInt).toArray();//【START】配列の中身を全部出力する ==============// for (int i = 0; i < intArray.length; i++) {// int j = intArray[i];// System.out.println(j);// }//【 END 】配列の中身を全部出力する ==============// 【START】配列内の値をすべて足す =============// int sum = 0;// for (int i = 0; i < intArray.length; i++) {// sum += intArray[i];// System.out.println(sum);// }// 【 END 】配列内の値をすべて足す ==============}}
こちらのコード内コメントアウトでint化した配列をつかって色々出力してみました。
配列の中身を全部出力する
[ 拡張for文]を用いて配列内の要素をすべて出力します
こちらのコメントアウトを開放してください。
//【START】配列の中身を全部出力する ==============for(inti:intArray){System.out.println(i);}//【 END 】配列の中身を全部出力する ==============
ターミナルに以下を入力する
100 200 300
【実行結果】
100
200
300
配列内の値をすべて足す
こちらのコメントアウトを開放してください。
// 【START】配列内の値をすべて足す =============intsum=0;for(inti=0;i<intArray.length;i++){sum+=intArray[i];System.out.println(sum);}// 【 END 】配列内の値をすべて足す ==============
ターミナルに以下を入力する
100 200 300
【実行結果】
100
300
600
【まとめ】
paiza問題を解くには今だとラムダ式とか、Listとか使うのが必須になるのかなーと思いますが、今後も更新していきます。