0

私のコードはファイルを読み取り、各行 (各レコード) を文字列配列に格納する必要があります。

私のtxtファイルはそれです:

FName Lname Number
second secondsecond 22
thired thithird 33
fourth fourfourr 44
fifth fiffif 55

しかし、コードを実行すると、プログラムは各行の最初の文字を表示しません! 次のように表示します。

econd secondsecond 22
hired thithird 33
ourth fourfourr 44
ifth fiffif 55

私のコード:

public class ReadfileIntoArray {

String[] columns=new String[]  {"FName","Lname","Number"};
String[] data=new String[100];

public void read() throws IOException{
FileReader fr=new FileReader("D:\\AllUserRecords.txt");
BufferedReader br=new BufferedReader(fr);
String line;  

while((line=br.readLine())!=null){

    for(int i=0;i<=br.read();i++){
        data[i]=br.readLine();
        System.out.println(data[i]);
    }
    }  
br.close();
System.out.println("Data length: "+data.length);
}

public static void main(String[] args) throws IOException{
    ReadfileIntoArray rfta=new ReadfileIntoArray();
    rfta.read();
}
}

そして、データの長さを確認したい:5(5行あるため)、しかし100が表示されます!

(抽象テーブルモデルの場合、この情報が必要です)

ありがとうございました。

4

6 に答える 6

2

2行目で配列サイズを100と宣言しているためです。基本的に 2 つのオプションがあります。ファイル内の行数が変わらない場合は、配列のサイズを 5 として宣言します。変化する場合は、たとえばArrayListを使用することをお勧めします。

List<String> data = new ArrayList<String>();
//in the while loop
data.add(br.readLine());
于 2013-01-05T19:27:35.403 に答える
1

インスタンス化すると ( ) 100 個のインデックスを持つ空の配列が作成dataされるため、配列のサイズは常に 100 になります。String[] data = new String[100]を使用する代わりにString[]List<String>

于 2013-01-05T19:27:24.123 に答える
1

コードが変更されました:

public class ReadfileIntoArray {

    String[] columns = new String[] { "FName", "Lname", "Number" };
    String[] data = new String[100];

    public void read() throws IOException {
        FileReader fr = new FileReader("D:\\AllUserRecords.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;

        int i = 0;
        while ((line = br.readLine()) != null) {
            data[i] = line;
            System.out.println(data[i]);
            i++;
        }
        br.close();
        // This is for resize the data array (and data.length reflect new size)
        String[] dataNew = new String[i];
        System.arraycopy(data, 0, dataNew, 0, i);
        data = dataNew;
        System.out.println("Data length: " + data.length);
    }

    public static void main(String[] args) throws IOException {
        ReadfileIntoArray rfta = new ReadfileIntoArray();
        rfta.read();
    }
}
于 2013-01-05T20:28:24.817 に答える
0

br.read()各行の先頭から 1 文字br.readLine()を読み取り、残りの文字を読み取ります。

この内側のループはほとんど意味がありません。

for(int i=0;i<=br.read();i++){
    data[i] = br.readLine();
    System.out.println(data[i]);
}

必要なのはこれだけです。最初の行が必要ない場合はbr.readLine()、ループの前に追加の呼び出しを追加します。

int i = 0;
while((line=br.readLine())!=null){
    data[i] = line;
    System.out.println(line);
    i++;
}  

ArrayList<String>また、予想される行数がわからない場合は、動的サイズのデータ​​構造を使用して文字列を格納してみてください (例: )。その後、 を使用myList.size()して行数を取得できます。

List myList = new ArrayList<String>();
while((line=br.readLine())!=null){
    myLine.add(line);
    System.out.println(line);
}  

System.out.println(myList.size());

//Retrieve the data as a String[].
String[] data = (String[]) myList.toArray();
于 2013-01-05T19:27:13.073 に答える
0

なぜそんなに複雑なのですか?以下は私の解決策です。参考までに。

String line;  
int cnt;

cnt = 0;
while((line = br.readLine()) != null){
    System.out.println(line);
    cnt++;
}

br.close();
System.out.println("Data length: "+cnt);
于 2013-01-05T19:53:10.397 に答える