2013-02-21 62 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())); 
    }