0

いくつかの数字を含む .txt ファイルがあります。次のようになります。

1 4364 658 4328 666
2 5109 659 5100 638
3 4936 659 4904 677
4 4936 659 4957 639
5 5518 660 5602 672

最初の列(1、2、3、4、5 ...)を除くすべての数値を抽出し、それらをさらに計算するために使用する必要があります。どんな助けでも、ヒントは大いに役立ちます。

4

7 に答える 7

2

java.ioおよびjava.nioパッケージのクラスをに使用できます。BufferedReaderは、ファイルを1行ずつ読み取ることができます。

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new     File("Path"))));
String line = null;
while((line = br.readLine()) != null){
    //do stuff in here
}

Google Guavaには、ファイルを読み取るための便利な方法があります。

この特殊なケースでの列の分割は、 Stringクラスのsplitメソッドによって実行できます。

line.split(" ");

分割については、GoogleのGuavaライブラリの使用も文字列分割に大いに役立つ可能性があります。

数値の処理は、 LongIntegerなどのラッパークラス、特にそれぞれのクラスの静的メソッドvalueOfを使用して実現できます。

Long.valueOf("123");
于 2013-03-12T20:27:26.650 に答える
2

このように最初の列を分離できます。

import java.io.*;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Path"))));
String line = null;
while((line = br.readLine()) != null){
    System.out.println(line.substring(line.indexOf(" ") + 1));
}
br.close();

必要に応じて残りの文字列を操作します。

于 2013-03-12T20:30:01.767 に答える
1

Google GuavaのFiles.readLines()メソッドを使用して、文字列をリストに追加します。そこから、残りの構文解析は、正規表現を使用するか、単に文字を数えることによって実行できます。Integerクラスには、個々の文字列を整数に変換するparseInt(String)メソッドが付属しています。

于 2013-03-12T20:28:04.900 に答える
1

私は二重ループを使用します。1つはファイル内のテキストを文字'\n'から分割します。これにより、各要素がファイル内の1行である文字列配列が得られ、その配列を反復処理して、文字から各行を展開します。 ''。その時点から、結果の配列の最初の要素を無視するだけです。

これが私が話している関数です:

String.split

于 2013-03-12T20:29:04.277 に答える
1

RandomAccesFileと int Wrapperclass Integerを参照してください。

    RandomAccesFile f = new RandomAccessFile("file.txt", "r"); // r=read, w=write
    String line = f.readLine();
    String[] values = line.split(" ");
    int[] valueInt;
    for(int i = 1; i < values.length; i++) {
      valueInt[i-1] = Integer.pars(values[i]);
    }

またはRandomaccesFile.readInt()-Methodeを試してください

于 2013-03-12T20:31:33.427 に答える
1

多分このようなもの:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ReadNumbers {

    public List<int[]> getNumbers(InputStream is) throws IOException {
        List<int[]> result = new ArrayList<int[]>();
        BufferedReader reader = null;
        String line = null;
        try {
            reader = new BufferedReader(new InputStreamReader(is));
            while ((line = reader.readLine()) != null) {
                String[] s = line.split("\\s+");
                int[] numbers = new int[s.length - 1];
                for (int i = 0; i < numbers.length; i++) {
                    numbers[i] = Integer.parseInt(s[i + 1]);
                }
                result.add(numbers);
            }
        } finally {
            if (reader != null) {
                reader.close();
            }
        }
        return result;
    }

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        ReadNumbers reader = new ReadNumbers();
        InputStream is = null;
        try {
            is = new FileInputStream("numbers.txt");
            List<int[]> numbers = reader.getNumbers(is);
            for (int[] n : numbers) {
                int sum = 0;
                for (int i : n) {
                    sum += i;
                }
                System.out.println("sum=" + sum);
            }
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException ignore) {
                }
            }
        }
    }
}
于 2013-03-12T20:50:37.560 に答える
0

FileReader を使用してファイルを読み取ります。

File tFile = loadGradleResource("testdata.int");
FileReader fileReader = null;
ArrayList<String> lines = new ArrayList<String>();
try {
    String line = null;
    fileReader = new FileReader( tFile );
    BufferedReader bufferedReader = new BufferedReader( fileReader );
    while ( !( line = bufferedReader.readLine() ).isEmpty() ) {
        lines.add(line); 
    }
    bufferedReader.close(); 
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
 }

そして、各行をトークン化するこのメソッド:

for ( String lin : lines ) {
    String[] stritems = lin.split( " " );
    for ( String it : stritems ) {
       // this shows how to parse to integer
       System.out.print( Integer.parseInt( it ) + "," );
    }
    System.out.println();
}
于 2013-03-12T21:07:36.287 に答える