空白で区切られた数字文字列をint配列に格納する例
プログラミングを始めたばかりの頃は、「文字(String)」と「数字(int)」の
違いがよく分からないかもしれません。
毎度、管理人イガジーです。
"123" などと、引用符(")で囲んであると、数字が書いてあっても
文字なんだろうなぁ(変だけど)、と思ってる方もいるかもしれませんね。
文字列(String)だと、"123"+"4" は、"1234" になります。
数字(int)だと、123+4 は、127 になるのです。
という訳で、数字文字列が空白で区切られているString から
数字をint配列として取り出すメソッドを作ってみましょう。
"10 20 30 40" から、 10, 20, 30, 40 を取り出すわけです。
(" 12 3 456 789 " などと、
空白は1つ以上かもしれません。)
取り出す数字の個数は、4個固定とします。
つまり、"1 2 3 4 5 6" の場合は、1, 2, 3, 4 まで取り出して終わりにします。
逆に、"1 2" など、4個に満たない場合は、初期値を補います。
初期値は、仮に、{ 20, 20, 260, 260} とします。
数字以外があった場合も、初期値にします。
例えば、"1 x 3 あ" という入力があったら1, 20, 3, 260 を返すことにします。
(20 や 260 は初期値です。)
では、テストプログラム付きのサンプルコードです。
public class Stub1 {
Stub1(){
arrayprint(getpos(" 0 10 100 120"));
arrayprint(getpos(" 0 10 100 120 200"));
arrayprint(getpos(" 0 10 100"));
arrayprint(getpos("5 x 9"));
}
void arrayprint(int []x){
for (int i=0;i<x.length;++i)
System.out.print(x[i]+" ");
System.out.println();
}
public static void main(String[] args) {
new Stub1();
}
int[] getpos(String posline) {
String []s=posline.trim().split(" +");
int []pdat={20,20,260,260}; // assume data
int sl=(s.length>pdat.length)? pdat.length:s.length;
for (int i=0;i<sl;++i) {
pdat[i]=s2int(s[i], pdat[i]);
}
return pdat;
}
int s2int(String s, int as) {
int r;
try {
r=Integer.parseInt(s);
} catch (NumberFormatException e) {
r=as;
}
return r;
}
}
ポイントは、String []s=posline.trim().split(" +"); ですね。
split() には、正規表現が使えます。" +" は、1つ以上の半角空白を表しています。
単に" "だと、空白が複数あった場合に、"" が切り出されてしまいます。
もちろん、1文字ずつ調べて自力で数字に変換する方法もありますが
今日は、sprit()の活用法をご紹介しました。
この記事へのコメントはこちら