2013-08-26 3 views
2

Je suis au début de l'écriture de mon programme (c'est pour une classe) et j'ai des problèmes pour l'écrire. Voici une liste d'objectifs que j'espère rencontrer.Nombre de mots à partir d'un fichier

  1. Il est une méthode donnée d'un fichier txt (en utilisant java.io.File)
  2. Il faut lire le fichier et de diviser les mots, les doublons sont autorisés. (Je prévois d'utiliser String.split et util.regex.Pattern pour calculer les espaces et la ponctuation)
  3. Je cherche à placer les mots dans un tableau 1D puis à trouver la longueur du tableau.

Le problème que je rencontre est l'analyse du fichier txt. On m'a dit en classe que Scanner peut le faire, mais je ne le trouve pas pendant que R (ing) TFM. Je suppose que je demande quelques directions dans l'API qui m'aident à comprendre comment lire un fichier avec Scanner. Une fois que je peux l'obtenir pour mettre chaque mot dans le tableau, je devrais être en clair.

EDIT: J'ai compris ce que j'avais besoin de faire grâce à l'aide de tout le monde. Mon extrait final finit par ressembler à ceci, si quelqu'un à l'avenir rencontrait cette question.

Scanner in = new Scanner(file).useDelimiter(" "); 
ArrayList<String> prepwords=new ArrayList<String>(); 
while(in.hasNext()) 
prepwords.add(in.next()); 
return prepwords; //returns an ArrayList without spaces but still has punctuation 

je devais jeter IOExceptions car java déteste ne pas être sûr qu'un fichier existe, donc si vous avez un « FileNotFoundException », vous devez importer et jeter IOException. À tout le moins, cela a fonctionné pour moi. Merci à tous pour votre contribution!

+1

http://www.javaprogrammingforums.com/file-input-output-tutorials/339-reading-file-line- line-using-scanner-class.html Utile? – MikeTheLiar

+0

Avez-vous essayé d'utiliser la méthode readLine()? – Zavior

+1

Voici le manuel: http://docs.oracle.com/javase/tutorial/essential/io/scanning.html – samlewis

Répondre

1

Voici un lien vers la JSE 6.0 Scanner API

Voici les informations dont vous avez besoin pour réaliser votre projet:

1. Use the Scanner(File) constructor. 
2. Use a loop that is, essentially this: 
    a. Scanner blam = new Scanner(theInputFile); 
    b. Map<String, Integer> wordMap = new HashMap<String, Integer>(); 
    c. Set<String> wordSet = new HashSet<String>(); 
    d. while (blam.hasNextLine) 
    e. String nextLine = blam.nextLine(); 
    f. Split nextLine into words (head about the read String.split() method). 
    g. If you need a count of words: for each word on the line, check if the word is in the map, if it is, increment the count. If not, add it to the map. This uses the wordMap (you dont need wordSet for this solution). 
    h. If you just need to track the words, add each word on the line to the set. This uses the wordSet (you dont need wordMap for this solution). 
3. that is all. 

Si vous ne avez pas besoin, soit la carte ou la définir, puis utiliser une liste < chaîne > et un ArrayList ou une listeLiée. Si vous n'avez pas besoin d'un accès aléatoire aux mots, LinkedList est la voie à suivre.

3
BufferedReader input = new BufferedReader(new FileReader(filename)); 

input.readLine(); 

C'est ce que j'utilise pour lire des fichiers. Notez que vous devez gérer la IOException

+0

Il s'attend à lire un mot à la fois ... pas une ligne. –

+1

Il peut implémenter cette logique lui-même. Il l'a dit lui-même, il va utiliser String.split. La question concerne l'obtention des données du fichier, ce qui est le cas. – Cruncher

0

Quelque chose simple:

//variables you need  
File file = new File("someTextFile.txt");//put your file here 
Scanner scanFile = new Scanner(new FileReader(file));//create scanner 
ArrayList<String> words = new ArrayList<String>();//just a place to put the words 
String theWord;//temporary variable for words 

//loop through file 
//this looks at the .txt file for every word (moreover, looks for white spaces) 
while (scanFile.hasNext())//check if there is another word 
{ 
    theWord = scanFile.next();//get next word 
    words.add(theWord);//add word to list 
    //if you dont want to add the word to the list 
    //you can easily do your split logic here 
} 

//print the list of words 
System.out.println("Total amount of words is: " + words.size); 
for(int i = 0; i<words.size(); i++) 
{ 
    System.out.println("Word at " + i + ": " + words.get(i)); 
} 

Source:

http://www.dreamincode.net/forums/topic/229265-reading-in-words-from-text-file-using-scanner/

Questions connexes