logo

Programmieren oder so ähnlich


Wörter zählen mit Java

Posted in Java von admin am 4. Sep. 2007

Beim Programmieren meines Webcrawlers/ Spider musste ich herausfinden wie oft eine Zeichenfolge in einem Quellcode vor kommt. Dabei vermisste ich eine Methode, die mir diese Anzahl angibt. Eine Lösung hab ich gefunden, welche ich euch nicht vorenthalten will.

Das Beispiel wird mit einer Textdatei “woerter.txt” gemacht, in der ich das Wort “Java” zählen und ganz einfach ausgeben will.

Hier die Textdatei “woerter.txt”



Wie geht es euch? Ich bin grad dran was in Java zu programmieren.

Es handelt sich um einen Webcrawler. Dieser wird mit Java und MySQL kombiniert.

Ich denke Java kann diese Aufgabe gut loesen.

Nun müssen wir im Java-Programm die Datei “woerter.txt” öffnen. Im folgenden Quellcode sind alle benötigten Variablen deklariert. Es wird auch die Datei “woerter.txt” geöffnet und eine While-Schlaufe gestartet, die pro Schlaufendurchgang eine Linie in die Variable “line” einliest.



import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

public class zaehleWoerter {

/*

  * Code by www.klajo.com

  */

 public static void main(String[] args) {

 	BufferedReader fr;

 	String line; //Hier wird immer eine Linie von woerter.txt gespeichert

 	String toCount = "Java"; //Die zu zaehlende Zeichenfolge

 	int anzahlVorkommnisse = 0; //Variable, die festhaellt wie oft "Java" vorkommt

 	int stringPos = 0; //Aktueller Index / Zeichenposition

try{

        	fr = new BufferedReader(new FileReader("C:/workspace/Experiments/src/woerter.txt"));

        	while ((line = fr.readLine())!= null) {

}

        	fr.close();

        } catch(FileNotFoundException e) {

        	System.out.println("FileNotFoundException eingetreten");

        } catch (IOException e){

        }

 }

}

Dieser Code genügt noch nicht, damit das Wort “Java” gezählt werden kann. Der Quelltext muss noch erweitert werden. Der zu erweiternde Code wird in der While-Schlaufe geschrieben, in der eine Linie der Textdatei “woerter.txt” eingelesen wird.

Nun kann die einzelne eingelesene Zeile analysiert werden. Also wird in einer Zeile einmal das Wort “Java” gefunden, wird die Variable “AnzahlVorkommnisse” um 1 inkrementiert.

Hier kommt uns eine String-Methode zu Nutze, und zwar handelt es sich dabei um die Methode “indexOf(gesuchteZeichenfolge, abStelle)”, welche mir die Stelle zurück gibt, in der die gesuchte Zeichenfolge beginnt. Wird die Zeichenfolge von der Methode nicht gefunden, so gibt “indexOf” als Resultat -1 zurück. (URL: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int))

Hier ein Codeschnippsel des ganzen Programmes, der bei einer einzigen Linie das Wort “Java” zählt.



        		while(line.indexOf(toCount, stringPos)!=-1){

        			stringPos = line.indexOf(toCount, stringPos);

        			stringPos++;

        			anzahlVorkommnisse++;

    			}

Solange indexOf() nicht -1 zurück gibt, wird mit indexOf() gesucht, wo “Java” (toCount) als erstens vorkommt. Danach wird im nächsten Schlaufendurchlauf ab einer Stelle weiter gesucht. Und jedes mal wird bei einem Fund die Variable anzahlVorkommnisse um 1 inkrementiert.

Hier noch der ganze Quellcode. Hoffe ihr habts einigermassen verstanden, schreibt mir sonst.


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class zaehleWoerter {

	/*
	 * Code by www.klajo.com
	 */
	public static void main(String[] args) {
		BufferedReader fr;
		String line; //Hier wird immer eine Linie von woerter.txt gespeichert
		String toCount = "Java"; //Die zu zaehlende Zeichenfolge
		int anzahlVorkommnisse = 0; //Variable, die festhaellt wie oft "Java" vorkommt
		int stringPos = 0; //Aktueller Index / Zeichenposition

        try{
        	fr = new BufferedReader(new FileReader("C:/workspace/Experiments/src/woerter.txt"));
        	while ((line = fr.readLine())!= null) {
        		while(line.indexOf(toCount, stringPos)!=-1){
        			stringPos = line.indexOf(toCount, stringPos);
        			stringPos++;
        			anzahlVorkommnisse++;
    			}
        		stringPos = 0;
        	}
        	fr.close();
        } catch(FileNotFoundException e) {
        	System.out.println("FileNotFoundException eingetreten");
        } catch (IOException e){
        }
        System.out.println("Das Wort " + toCount + " kommt " + anzahlVorkommnisse + " mal vor.");
	}
}

Ein Kommentar zu 'Wörter zählen mit Java'

Kommentare als RSS oder TrackBack von 'Wörter zählen mit Java'.

  1. Hero Wanders sagt,

    am 4. Sep. 2007

    Ich hab den Code jetzt nicht ausprobiert, aber ich denke, dass z.B. das Suchwort “mama” im Text “asdf mamama fasdf” zwei Treffer landen wird.
    Wenn man so ein Verhalten verhindern möchte kann man statt dem stringPos++; ein stringpos += toCount.length(); verwenden.

Kommentar hinterlassen:


Blogverzeichnis - Blog Verzeichnis bloggerei.de blog-o-rama.deSuchmaschinenoptimierung mit Ranking-Hits supported by www.rankingcloud.de Blog Top Liste - by TopBlogs.de Free Games

Add to Technorati Favorites Sofortkredit ohne Schufa