2

私はこのテキストファイルを持っています:

2013001  Jaymarion Manalo L. Service Crew March 15, 2013   8:00   12:00   13:00   17:00   10.0
2013001  Jaymarion Manalo L. Service Crew March 16, 2013   8:00   12:05   13:05   17:30   10.0

ここで、String date1 = "March 15, 2013" の場合、それが属する行を読み取り、"8:00"、"12:00"、"13:00" のみを取得するという条件があります。 「17:00」と宣言し、テキスト フィールドに表示します。つまり、それは可能ですか?それはどのように行われますか?私が言おうとしていることをあなたが理解していることを願っています。私はJavaが初めてです-_-

4

5 に答える 5

1

を使用してファイルを文字列のリストとして読み取ることができますFileUtils.readLines() 。これにより、文字列のリストが得られます。次に、リストを反復処理し、 を使用して日付を探しますstring.contains("March 15, 2013")

注:完全なコードを共有できますが、上記の情報を使用してコードを作成してみてください。

于 2013-03-16T11:54:28.970 に答える
1

もちろん、これは可能です。

ファイルを 1 行ずつ読み取る必要があります。が含まれているかどうか、各行を確認しますdate1。存在する場合は、必要なデータを抽出して解析します。

標準 API を使用してこれを実現する方法のサンプル コードを次に示します。

public class ReadFileLineByLineAnExtractSomeText {

    private static final String src = "test.txt";
    private static final String date1 = "March 15, 2013";

    @BeforeClass
    public static void genTextFile() throws IOException {
        OutputStream os = new FileOutputStream(src);
        os.write(("blah bla foo bar\n" +
                "2013001  Jaymarion Manalo L. Service Crew March 15, 2013   8:00   12:00   13:00   17:00   10.0\r\n" + 
                "2013001  Jaymarion Manalo L. Service Crew March 16, 2013   8:00   12:05   13:05   17:30   10.0\r" +
                "... the end").getBytes());
        os.close();
    }


    @Test
    public void testReadAndExtract() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(src));
        String line = br.readLine();
        int lineNumber = 0;
        while(line != null) {
            lineNumber++;
            int i = line.indexOf(date1);
            if(i != -1) {
                int s = i + date1.length();
                int e = line.length();
                System.out.println(date1 + " found in line " + lineNumber  + " at index " + i + ", extract text from " + s + " to " + e);
                String extractedText = line.substring(s, e);
                String[] extractedTextParts = extractedText.trim().split("\\s+");
                for(String part : extractedTextParts) {
                    if(isTime(part)) {
                        System.out.println("    '" + part + "'");   
                    }
                }
            }
            line = br.readLine();
        }
        br.close();
    }

    private boolean isTime(String part) {
        return part == null ? false : part.matches("\\d{1,2}:\\d{1,2}");
    }
}

出力

March 15, 2013 found in line 2 at index 42, extract text from 56 to 94
    '8:00'
    '12:00'
    '13:00'
    '17:00'
于 2013-03-16T12:22:28.523 に答える
0

行から行を読み取るには...

try {
    FileReader fileReader = 
        new FileReader(fileName);

    BufferedReader bufferedReader = 
        new BufferedReader(fileReader);
    //in any loop use bufferedreader.readline() untill you get your desired line
    //to part your string use split()
    bufferedReader.close();         
}
于 2013-03-16T11:55:25.447 に答える
0

これを試すことができます:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class FileReaderService {

    public static void main(String[] args) {
        FileReaderService fileReaderService = new FileReaderService();
        fileReaderService.performExecute("March 15, 2013");
    }

    public void performExecute(String inputPattern) {
        List<String[]> matches = new ArrayList<String[]>();
        try {
            FileInputStream fileInputStream = new FileInputStream("C:/Users/Guest/Desktop/your-file.txt"); /*change your file path here*/
            DataInputStream dataInputStream = new DataInputStream(fileInputStream);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(dataInputStream));
            String strLine;
            while ((strLine = bufferedReader.readLine()) != null) {
                if (strLine.contains(inputPattern)) {
                    String[] splits = strLine.split("[\\s]{3,}"); /*splits matching line with 3 consecutive white spaces*/
                    matches.add(splits);
                }
            }
            dataInputStream.close();

            for (String[] items : matches) {
                System.out.println(items[1] + "\t" + items[2] + "\t" + items[3] + "\t" + items[4]);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

出力:

8:00    12:00   13:00   17:00
于 2013-03-16T12:21:39.227 に答える
0

提案されているように、必要な行まで反復してから、次のようなことを試すことができます:-

String s= FileUtils.readLines(filename).get(lineNumber);

詳細については、これFileUtils.readLines()をチェックしてください。

于 2013-03-16T11:49:40.827 に答える