LoginSignup
weemiee
@weemiee (weemiee)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

行ごとの標準入力について

行ごとに標準入力(何行まで入力されるかはユーザより入力されるまで分からない)を行わせてsplit (対象:スペース区切り) し、それぞれの行のsplit後の要素数を出力するのを目標にプログラムを作りました。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		ArrayList<String> testList = new ArrayList<>();
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String str;
		while((str = in.readLine()) != null) testList.add(str);
		String[] test = testList.toArray(new String[testList.size()]);
		String[] line = new String[test.length];
		for(int i = 0; i < line.length; i++){
			line[i] = test[i].split(" ");  //エラー
			System.out.println(line[i].length);  //エラー
		}
	}
}

可変長のtestListを作成 → 行ごとに入力を読み込んでtestListに追加 → 変数testを作成し、ListのtestListを配列に変換する

というところまでは良くて、そこから配列testの要素 (String test[0], test[1], ……) をそれぞれsplitして分割した結果を配列lineに格納して細分化 (line[0][0], line[0][1], …… , line[1][0], line[1][1], ……) する作業で行き詰っています。

splitのところで「String[]をStringに変換することはできません」というエラーになってしまいます。その意味を分かりながらも、「line[i] = test[i].split(" ");」をうまく修正できず困っています。

ささいな事でも良いので、アドバイス頂けないでしょうか?

0

3Answer

split()メソッドは、分割された文字列の配列を返します。なので、line変数の宣言をString[][]に変更し、line[i] = test[i].split(" ");を修正する必要があるかと思います。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        ArrayList<String> testList = new ArrayList<>();
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = in.readLine()) != null) testList.add(str);
        String[] test = testList.toArray(new String[testList.size()]);
        String[][] line = new String[test.length][];
        for (int i = 0; i < line.length; i++) {
            line[i] = test[i].split(" ");
            System.out.println(line[i].length);
        }
    }
}

これで、各行をsplitして、要素数を出力する事ができるかと思いますがどうでしょうか?

1

sprit の結果は String[] で返される一方で、line[i] は String 型です。
line を下記の様に定義すると、各行で分解された文字列配列が格納されます。
String[][] line = new String[test.length][];

1

@atsutamaさん、@mickey_devさん、ご回答頂きありがとうございます。
これまで「String[][] line = new String[test.length];」のように「[]」を左辺にはつけ足しても右辺にはつけ足さず、その時点でエラー理由だった事に気づかずに他のコードをひたすら弄っていました…
どのように間違っていたのかを知る事ができ、とても助かりました。

1

Your answer might help someone💌