2012-06-16 8 views
0

J'essaie de comprendre comment je lirais un fichier, puis comptons le nombre de fois qu'une certaine chaîne apparaît.Compter le nombre de fois qu'une chaîne apparaît dans un fichier

C'est ce que mon dossier ressemble, il est un txt:

Test 
    Test 
    Test 
    Test 

Je veux la méthode pour revenir alors combien de fois il est dans le fichier. Une idée sur comment je pourrais y arriver? J'ai surtout besoin d'aide avec la première partie. Donc, si je cherchais la chaîne "Test", je voudrais qu'elle renvoie 4.

Merci à l'avance! J'espère avoir donné assez d'informations!

+4

Qu'avez-vous fait jusqu'à présent? cela ressemble à des devoirs –

+0

Tout ce que j'ai fait est d'avoir mon programme pour prendre une chaîne (le nom du joueur), et l'écrire dans un fichier sur une nouvelle ligne à chaque fois. Ce n'est pas un devoir, Ceci est un système d'avertissement/interdiction pour mon jeu. – Zomby

Répondre

0

vous êtes ici:

public int countStringInFile(String stringToLookFor, String fileName){ 
    int count = 0; 
    try{ 
    FileInputStream fstream = new FileInputStream(fileName); 
    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String strLine; 
    while ((strLine = br.readLine()) != null) { 
     int startIndex = strLine.indexOf(stringToLookFor); 
     while (startIndex != -1) { 
     count++; 
     startIndex = base.indexOf(stringToLookFor, 
            startIndex +stringToLookFor.length()); 
     } 
    } 
    in.close(); 
    }catch (Exception e){//Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
    } 
    return count; 
} 

Utilisation: int count = countStringInFile("SomeWordToLookFor", "FileName");

+0

Votre hypothèse étant la chaîne se produit seulement une fois par ligne. –

+0

A travaillé parfaitement, merci beaucoup. Je suis encore très nouveau dans tout ce genre de fichier. – Zomby

+0

@JohnD C'est vrai, j'ai mis à jour mon code maintenant – GETah

0

Ajoutez cette méthode à votre classe, transmettez-lui FileInputStream et renvoyez le nombre de mots dans un fichier. Gardez à l'esprit, ceci est sensible à la casse.

public int countWord(String word, FileInputStream fis) { 
BufferedReader in = new BufferedReader(new InputStreamReader(fis)); 
String readLine = ""; 
int count = 0; 
while((readLine = in.readLine()) != null) { 
String words = readLine.split(" "); 
for(String s : words) { 
if(s.equals(word)) count++; 
} 
return count; 
} 

Juste écrit que maintenant, et il n'est pas testé, alors laissez-moi savoir si cela fonctionne. Aussi, assurez-vous que vous comprenez ce que j'ai fait si c'est une question de devoirs.

0

Si vous avez au point de lecture dans chaque fichier dans une chaîne que je suggère regarder la méthode String Split. Donnez-lui le code de chaîne 'Test' et il retournera un tableau de type string - compte le nombre d'éléments par ligne. Résumez-les pour obtenir votre occurrence totale.

import java.io.*; 

public class StringCount { 
    public static void main(String args[]) throws Exception{ 

     String testString = "Test"; 
     String filePath = "Test.txt"; 
     String strLine; 
     int numRead=0; 

     try { 
      FileInputStream fstream = new FileInputStream(filePath); 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

      while ((strLine = br.readLine()) != null) { 
       strLine = strLine + " "; 
       String [] strArry = strLine.split(testString); 

       if (strArry.length > 1) { 
        numRead = numRead + strArry.length - 1; 
       } 
       else { 
        if (strLine == testString) { 
         numRead++; 
        } 
       } 
      } 

      in.close(); 

      System.out.println(testString + " was found " + numRead + " times."); 

     }catch (Exception e){ 
     } 
    } 
} 
+0

Cela a seulement retourné 1 chaque fois. Quand "Test" a été écrit 6 fois. Une idée pourquoi? – Zomby

+0

Pouvez-vous fournir votre fichier de test? Tous les tests que j'ai effectués contre lui sont retournés correctement, donc je me demande quel cas d'utilisation j'ai manqué. –

0

je ferais ceci:

  1. ouvrir et lire la ligne de fichiers en ligne,
  2. vérifier combien de fois une ligne contient le mot donné ...
  3. augmenter un compteur global pour que ..

public static void main(String[] args) throws IOException { 
    BufferedReader in = new BufferedReader(new FileReader("Test.txt")); 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the subtring to look for: "); 
    String word = sc.next(); 
    String line = in.readLine(); 
    int count = 0; 
    do { 
    count += (line.length() - line.replace(word, "").length())/word.length(); 
    line = in.readLine(); 
    } while (line != null); 
    System.out.print("There are " + count + " occurrences of " + word + " in "); 
} 
Questions connexes