2

私はファイルを持っています:

12345678;ABC 123456A12345678;45678945

これが私がすることです:

Scanner s = new Scanner(new File(testCase.getFileName()));
while (s.hasNext()) {
    String[] lineItems = s.next().split(";");
}

出力:

12345678;ABC
123456A12345678;
45678945

必要な出力:

12345678
ABC 123456A12345678
45678945

"ABC 123456A12345678"空白に遭遇したときに壊れないように、単一のトークンと見なしてほしい。

私は何をすべきか?

4

3 に答える 3

6

ここから:

「スキャナーは、デフォルトで空白に一致する区切り文字パターンを使用して、入力をトークンに分割します」。

したがって、プログラムは最初に空白に従ってファイルを分割し、次に.split(";");これらを;.

;次のように区切り文字を設定する必要があります。

Scanner s = new Scanner(new File(testCase.getFileName())));
s.useDelimiter(";");
while (s.hasNext()) {
   System.out.println(s.next());
}
于 2013-02-21T15:29:06.290 に答える
0

次のようなものを使用できます。String[] items = line.split(";");

理解を深めるために、以下の例を検討してください。ハードドライブに「data.txt」という名前のファイル(「C:/ Users / sarath_sivan / Desktop」など)があり、次のようなレコードが含まれているとします。

12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945
12345678;ABC 123456A12345678;45678945

また、java.util.Scannerクラスでスキャンするときに空白を無視したいとします。

まず、データを保持するモデルクラスを作成できます。次のようなものを使用できます。

package com.stack.overflow.works.model;

/**
 * @author sarath_sivan
 */
public class Data {

    private String column1;
    private String column2;
    private String column3;

    public Data() {}

    public String getColumn1() {
        return column1;
    }

    public void setColumn1(String column1) {
        this.column1 = column1;
    }

    public String getColumn2() {
        return column2;
    }

    public void setColumn2(String column2) {
        this.column2 = column2;
    }

    public String getColumn3() {
        return column3;
    }

    public void setColumn3(String column3) {
        this.column3 = column3;
    }

}

次に、スキャン用のインターフェイスを作成できます。パッケージcom.stack.overflow.works.service;

/**
 * @author sarath_sivan
 */

public interface Scannable {

    abstract public void scan();

}

次に、インターフェイスを実装する新しいクラスを作成することにより、ビジネスロジックを実装できます。

package com.stack.overflow.works.service;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.stack.overflow.works.model.Data;

/**
 * @author sarath_sivan
 */
public class FileScanner implements Scannable {

    private static final String SEMICOLON = ";";
    private static final String TAB_SPACE = "\t";
    private static final String FILE_NAME = "C:/Users/sarath_sivan/Desktop/data.txt";

    @Override
    public void scan() {
        File file = new File(FILE_NAME);
        Scanner scanner = null;
        List<Data> recordList = new ArrayList<Data>();
        Data data = null;
        try {
            scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                String[] items = line.split(SEMICOLON);
                data = new Data();
                data.setColumn1(items[0]);
                data.setColumn2(items[1]);
                data.setColumn3(items[2]);
                recordList.add(data);
            }
            displayRecords(recordList); /*Displaying your records*/
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

    private void displayRecords(List<Data> recordList) {
        System.out.println("*DISPLAYING YOUR RECORDS:*");
        System.out.println("COLUMN1" + TAB_SPACE + "COLUMN2" + TAB_SPACE + TAB_SPACE + "COLUMN3");
        for (Data data: recordList) {
            System.out.println(data.getColumn1() + TAB_SPACE + data.getColumn2() + TAB_SPACE + data.getColumn3());
        }
    }

}

最後に、ロジックを検証するためのサービスまたはテストクラスを作成できます。パッケージcom.stack.overflow.works.main;

import com.stack.overflow.works.service.FileScanner;
import com.stack.overflow.works.service.Scannable;

/**
 * @author sarath_sivan
 */
public class ScannerService {

    public static void main(String[] args) {
        Scannable fileScanner =  new FileScanner();
        fileScanner.scan();
    }

}

これで、次のような出力を生成するScannerServiceクラスを実行できます。

あなたの記録を表示する:

COLUMN1     COLUMN2             COLUMN3
------------------------------------------
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945
12345678    ABC 123456A12345678 45678945

ここでパッケージ構造を見ることができますここに画像の説明を入力してください

お役に立てれば。ありがとうございました!

于 2013-02-21T17:02:10.597 に答える
0
    LinkedList<Double> a = new LinkedList<Double>();
    File f = new File("C:/Users/etc.txt");
    BufferedReader in = new BufferedReader(new FileReader(f));
    String [] tmp=null;
    String line;
    while ((line = in.readLine()) != null) {
        if(line.trim().contains("   "))
             tmp = line.split(" ");
        a.add(Double.parseDouble(tmp[0].trim()));
    }
于 2014-03-13T13:41:34.490 に答える