2013-05-17 2 views
0

Я написал программу, которая должна принимать входные данные из файла и извлекать из него только текст, сохраняя его содержимое в массиве. Мое содержимое текстового файла:Сканер не работает на StringBuilder

There is some!text.written%in 
the FILE[That]=Have+to`be==separated???? 

И то, что я попытался код:

public static void main(String[] args) throws FileNotFoundException, IOException { 
    BufferedReader file = new BufferedReader(new FileReader("mfile.txt")); 
    List<String> list = new ArrayList(); 
    String str; 
    StringBuilder filedata = new StringBuilder(); 
    Scanner toknizer = new Scanner(filedata.toString()); 
    while((str=file.readLine())!=null){ 
     filedata.append(str); 
    } 
    toknizer.useDelimiter("[^a-z]"); 
    while(toknizer.hasNext()){ 
     list.add(toknizer.next()); 
    } 
    System.out.println(list); 
} 

в это время я только хочу, чтобы извлечь текст, который написан в небольших алфавитах. Но программа распечатывает пустой список. Отладка показала, что toknizer.hasNext() возвращает false в while(toknizer.hasNext()). Что не так? Я использую неправильное регулярное выражение? Я получил идею использования [^a-z] от here.

ответ

5
Scanner toknizer = new Scanner(filedata.toString()); 

Вы только что создали Scanner вокруг пустой строкой.
У этого не будет никаких жетонов.

Строки неизменяемы; добавление к StringBuilder позже не влияет на существующий экземпляр String, который вы передали в Scanner.

0

Почему бы просто не сделать это так?

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



public static void main(String[] args) { 
    List<String> list = new ArrayList<String>(); // If List is generic then ArrayList should be too 
    Scanner input = null; 

    try { 
     input = new Scanner(new File("mfile.txt")); 
    } catch(Exception e) { 
     System.out.println(e.getStackTrace()); 
    } 

    input.useDelimiter("[^a-z]"); 
    while(input.hasNext()) { 
     String parse = input.next(); 
     if(!parse.equals("")) { 
      list.add(parse); 
     } 
    } 

    System.out.println(list.toString()); 
} 

Теперь вам не придется использовать BufferedReader, FileReader или StringBuilder.

+0

Потому что я не так опытен на Java в это время ..... – Tariq

Смежные вопросы