2013-02-21 65 views
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"視爲一個單一的令牌,並且在遇到空白時不會中斷。

我該怎麼辦?

回答

6

here

「A掃描儀斷開其輸入到使用定界符模式,默認情況下與空白匹配」。

因此,您的程序先根據空白分割文件,然後.split(";");將這些分割爲;

您需要的分隔符設置爲;如下:

Scanner s = new Scanner(new File(testCase.getFileName()))); 
s.useDelimiter(";"); 
while (s.hasNext()) { 
    System.out.println(s.next()); 
} 
0

您可以使用像這樣:String[] items = line.split(";");

考慮更好地理解下面的例子: 讓我們假設你有一個文件名爲「data.txt」位於您的硬盤驅動器(稱爲「C:/用戶/ sarath_sivan /桌面」),其中包含您的記錄是這樣的:

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; 
    } 

} 

接下來,我們可以創建一個用於掃描目的的接口。 package 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("COULUMN1" + TAB_SPACE + "COULUMN2" + TAB_SPACE + TAB_SPACE + "COULUMN3"); 
     for (Data data: recordList) { 
      System.out.println(data.getColumn1() + TAB_SPACE + data.getColumn2() + TAB_SPACE + data.getColumn3()); 
     } 
    } 

} 

一個新的類實現業務邏輯,我們可以創建一個服務或測試類來驗證邏輯。 package com.stack.overflow.works。主要;現在

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類:

*DISPLAYING YOUR RECORDS:* 
COULUMN1 COULUMN2  COULUMN3 
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 

你可以看到封裝結構在這裏enter image description here

希望這有助於。 謝謝!

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())); 
    }