Wort suchen lassen

newbee

Mitglied
Hallo, ich habe ien Programm geschrieben, was wie ein Art Datenbank für CDs ist. jetzt will ich das ein Benutzer nach einen Interpreten suchen kann, in dem er die Anfangsbuchstaben eingibt. Ich habe schon mal gehört das man das mit Indexoff machen kann aber wie geht das genau? gibt es noch eine andere Möglichkeit?
mfg
 
Servus!

Code:
/*
 * Created on 11.12.2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package pack;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class InterSuche {

	Interpreter[] interpreters;

	public static void main(String[] args) {
		new InterSuche().doIt();
	}

	/**
	 * 
	 */
	private void doIt() {
		// TODO Auto-generated method stub

		String[] names =
			new String[] {
				"Hans",
				"Michael",
				"Thomas",
				"Dirk",
				"Christian",
				"Domenik",
				"Matthias",
				"Lukas",
				"Heino",
				"Sadam" };

		interpreters = new Interpreter[10];
		for (int i = 0; i < interpreters.length; i++) {
			interpreters[i] = new Interpreter(names[i]);
		}

		//..............
		//Suche den Interpreter mit Chris* als Zeichenfolge

		String[] suchMuster = new String[] { "Th*", "^*RK", "^*tth*" };

		Interpreter inter;
		for (int i = 0; i < suchMuster.length; i++) {
			inter = searchInterByPattern(suchMuster[i]);
			if (inter != null)
				System.out.println(inter.getName());
			else
				System.out.println("Suche erfolglos ... :-(");
		}

	}

	/**
	 * @param string
	 * @return
	 */
	private Interpreter searchInterByPattern(String string) {
		// TODO Auto-generated method stub
		Pattern pat = Pattern.compile(string, Pattern.CASE_INSENSITIVE);
		Matcher matcher = null;

		for (int i = 0; i < interpreters.length; i++) {
			matcher = pat.matcher(interpreters[i].getName());
			if (matcher.find())
				return interpreters[i];
		}

		return null;

	}

	class Interpreter {
		private String name;
		//und die tausend anderen Attribute ...
		/**
		 * 
		 */
		public Interpreter(String nam) {
			super();
			this.name = nam;
			// TODO Auto-generated constructor stub
		}

		/**
		 * @return
		 */
		public String getName() {
			return name;
		}

	}
}


Gruß Tom
 
danke, aber das geht bei mir nicht. ich wollte doch nur mein vorhandenes programm erweitern, das der user die anfangsbuchstaben eingibt und das programm vergleicht dann alle vorher eingegebenen interpreten.
p.s.
wir dürfen keine imports verwenden
mein program
Code:
import java.io.*;

public class CDSammlung{
    public static void main(String[] args)
    throws IOException
    {int a=0 ,Anzahllieder,Anzahlinterpret;
    String x= "",NameInterpret,NameTitel;
    String[] NameCD;
    String[][]lied;
    String[][] interpret;
    interpret     = new String[999][];
    lied          = new String[999][];
    NameCD        = new String[999];

    BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("*CD-Datenbank*");
    System.out.println();
        while(!(x.equals("nein") )) {
            System.out.println("Wollen Sie eine neue CD eingeben? Ja/Nein" );
            x = din.readLine();
                if(x.equals("nein")) break;
                if(x.equals("ja"))
            System.out.print("Wie viele Lieder sind auf der "+(a+1)+ " CD? ");
            Anzahllieder = Integer.parseInt(din.readLine()); 
            lied[a] = new String[Anzahllieder];
            System.out.print("Wie viele Interpreten sind auf der"+(a+1)+" CD? ");
            Anzahlinterpret = Integer.parseInt(din.readLine());
            interpret[a] = new String[Anzahllieder];
            System.out.println("Bitte geben die Namen der "+(a+1)+" CD ein ");
            NameCD[a] = din.readLine();

            for ( int i = 0; i < lied[a].length; i++) {    //lenght
                System.out.println();
                   System.out.print("Bitte geben Sie den Namen des "+i+1+". Liedes der "+(a+1)+" CD ein: ");
                    lied[a][i] = din.readLine();
                      System.out.println();

            for ( int j = 0; j< interpret[a].length; j++){ //lenght
                System.out.println();
                 System.out.print("Bitte geben sie den Namen des " +j+1+ " Interpreten der "+(a+1)+" CD ein: ");
                  interpret[a][j] = din.readLine();
                   System.out.println();
            }
       
        a++; }
       
        }
    System.out.println("Wollen Sie die Daten aller bis jetzt eingebenen CD's angezeigt bekommen Ja/nein ? ");
    x = din.readLine();
    if(x.equals("ja")){
        for (int z=0; z<a; z++) {
            System.out.println(" Der name der " +(z+1)+" CD ist " + NameCD[z]);
            for ( int i=0; i<lied[z].length; i++)
             System.out.println(" das " +(i+1)+" lied ist "+ lied[z][i]);
              for (int i=0; i<interpret[z].length;i++)
               System.out.println(" der " +(i+1)+ " interpret ist " + interpret[z][i]);
        }



            }
        }
    }
 
Servus!

soso keine imports ...
import java.io.*;
//implizit wird IMMER java.lang.* eingebunden .... (d.h. auch wenn kein
import Statement vorhanden ist stehet dort immer "verdeckt" import java.lang.*;
//...

String.indexOf(String str)
String.startsWith(String str) sind deine Freunde ...

Gruß Tom
 
Zuletzt bearbeitet:
java.lang.*
Wird immer automatisch eingebunden womit man es nicht einbinden braucht

Auf was will euer prof. eigentlich hinaus ^^?
Allein die tatsache das er ne Datenbank mit nem Array realisieren will ist schon ziemlich *ditsch*

http://java.sun.com/j2se/1.4.1/docs/api/index.html
Das sollte dir mal im grossen und ganzen weiter helfen.

Links oben im Frame einfach mal auf java.lang klicken,
dann im neugeladenen darunterliegenden Frame auf String klicken
Hier sind nun alle methoden die du auf Strings anwenden kannst.
Sei es mit variablen
String test = "hallo";
test.funktion;
oder direkt mit dem string
"hallo".substring....

da alles eine ableitung von Object ist kannste es beliebig benutzen
 
Zuletzt bearbeitet:
Mal allgemein ein paar Anmerkungen zum Programmierstil:

1.) Lesbarkeit:
Variablen sollten mit einem Kleinbuchtaben beginnen, Klassen hingegen mit einem Grußbuchstaben
Einrückungen sind dazu da, logische Blöcke bzw. Abschnitte zu verdeutlichen. Das bedeutet z.B. dass der Code der zum if-Statement gehört eingerückt sein sollte oder der Code der zum for-Kostrukt gehört und ähnliches.

2.) Konsequenz:
Ob man Variablen direkt nach der Deklaration initialisiert oder nicht ist Geschmackssache, man sollte sich aber schon für eine Variante entscheiden. Oder zumindest auch hier ein bisschen strukturieren.
Code:
String x= "",NameInterpret,NameTitel;
ist zumindest subjektiv betrachtet nicht sonderlich übersichtlich.

3.) Plausibilität:
Auch über die Verwendung von break; kann man sich streiten, aber in deinem konreten Beispiel macht die Laufbedingung der while Schleife durch das break; keinen Sinn mehr:
Code:
while(!(x.equals("nein") )) {
            System.out.println("Wollen Sie eine neue CD eingeben? Ja/Nein" );
            x = din.readLine();
                if(x.equals("nein")) break;
Da hättest du genauso gut ein while(true) einsetzen können. Sinnvoller ist aber im Falle von "ja" den restlichen Code ausführen zu lassen und im anderen Falle einfach nichts zu tun.

Danach fällt sofort das nächste if-Statement auf:
Code:
    if(x.equals("ja"))
            System.out.print("Wie viele Lieder sind auf der "+(a+1)+ " CD? ");
            ...
Die Zeile System.out.print(...); ist die einzige die von diesem if-Statement betroffen ist. Gibt der User etwas anderes als ja oder nein an wird der restliche zum "ja" gehörende Code auch ausgeführt. Es fehlen also die geschweiften Klammern {}, um den Block zu umschließen.

Abgesehen vom letzten Punkt sind das aber wirklich nur einige Hinweise zum Stil. Ich hab jetzt nicht speziell nach Fehlern gesucht...

Peter
 
Ich finde sowieso das alles private gehört!
wenn mal was nicht private ist dann erstellt man getter und setter
keiner hatt im code eines anderen was zu suchen!
ok es gibt ausnahmen aber prio hatt die private regel!
 
Zurück