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 (int i = 0; i < sa.length; i++) {
ia[i] = Integer.parseInt(sa[i]);
}
【使用場面】
体感paizaの問題を解く際は、かなり頻出する操作だと感じました。例えば以下のようなパターンで私はつまりました。
- scanner で「100,200,300」のように区切って入力
- 入力の内容を一度 文字列の配列 として分割する
- 2 をint型の配列 に変換して計算をおこなう
といった感じでした。
以下にその例のサンプルコードを載せておきます。
【サンプルコード】 「scannerで打ち込まれた文字列の配列を数値型に変換」
【Main.java】
// scannerのインポート
import java.util.Scanner;
//Stream APIのインポート
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// scannerのインスタンス化
Scanner sc = new Scanner(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 (int i : intArray) {
System.out.println(i);
}
//【 END 】配列の中身を全部出力する ==============
ターミナルに以下を入力する
100 200 300
【実行結果】
100
200
300
配列内の値をすべて足す
こちらのコメントアウトを開放してください。
// 【START】配列内の値をすべて足す =============
int sum = 0;
for (int i = 0; i < intArray.length; i++) {
sum += intArray[i];
System.out.println(sum);
}
// 【 END 】配列内の値をすべて足す ==============
ターミナルに以下を入力する
100 200 300
【実行結果】
100
300
600
【まとめ】
paiza問題を解くには今だとラムダ式とか、Listとか使うのが必須になるのかなーと思いますが、今後も更新していきます。