Avatar billede mutantboy Nybegynder
23. juli 2003 - 02:25 Der er 4 kommentarer og
1 løsning

Indtastet String indeholdt i en anden String?

Hej jeg er ved at lave et kartotek over mine film. Når jeg søger efter en titel vil jeg gerne returnere alle de elementer der har titlen hvor det indtastede søgeord er indeholdt.

Eksempel:
i databasen findes 3 elementer med titlerne Rambo 1, Rambo 2 og Rambo 3

søgeord = Rambo

Ønsket retur = Rambo 1, Rambo 2 og Rambo 3

Jeg er ikke helt sikker på hvordan jeg gør...

Er det måske noget med noget substring ?

Jeg søger naturligvis en optimal løsning / hint :-)
Mvh.

Danni
Avatar billede mikkelbm Nybegynder
23. juli 2003 - 02:31 #1
Hvorfor ikke lade databasen gøre det?

"SELECT * FROM table WHERE Titel LIKE '" + søgeord + "%' ORDER BY Titel";

Bare en mulighed...
Avatar billede mikkelbm Nybegynder
23. juli 2003 - 02:35 #2
Og så en metode der returnere en ArrayList:

sql = ovenstående sql-sætning.
felt = det felt du vil ha' returneret fra databasen (eks. titel)

public ArrayList getListe(String sql, String felt)
{
    ArrayList list = new ArrayList();
    try
    {
        r = s.executeQuery(sql);
        while(r.next())
        {
              list.add(r.getString(felt));
        }
    }
    catch (SQLException q)
    {
          System.out.println("Fejl: " + q);
    }
    return list;
}
Avatar billede arne_v Ekspert
23. juli 2003 - 07:24 #3
Du kan teste for om en STring indeholder en anden String med
metoden indexOf.

Men jeg tror også at mikkels løsning er den rigtige !
Avatar billede ng-km Nybegynder
23. juli 2003 - 19:07 #4
Jeg har engang lavet en klasse(Tokenfinder) der kan gøre nogenlunde hvad du søger. Jeg bruger den til at lede efter "tekstbidder" i mine Java-filer. Jeg har lige lavet et lille testprogram til klassen. Alt hvad du skal gøre er at lave en lille tekstfil der indeholder en række linier med tekst (filmtitler), og placere den i samme mappe som denne klasse. Filen skal hedde test.txt, men du kan jo selv se på constructoren hvad klassen skal bruge.

Du kan så selv tilpasse søgealgoritmen så den passer til det du skal bruge den til. Denne her er forresten case-sensitiv.

import java.awt.*;
import java.io.*;
import java.util.*;

public class TokenHandler
{
    private File valgtFil;
    public StringBuffer resultat;
    private String soegeToken;
    private String extension;
   
    public TokenHandler(File valgtFil, String soegeToken, String extension)
    {
        this.valgtFil = valgtFil;
        this.soegeToken = soegeToken;
        this.extension = extension;
       
        resultat = new StringBuffer();
    }
   
    public String soegning()
    {
        if(valgtFil.isDirectory())
            checkDirectory(valgtFil);
        else
            checkFile(valgtFil);
       
        return resultat.toString();
    }
   
  private void checkDirectory(File sourceDir)
    {
        File[] fileArray = sourceDir.listFiles();
       
      try
      {
          if(fileArray != null)
          {
              for (int i=0; i < fileArray.length; i++)
              {
                  if (fileArray[i].isFile())
                  {
                      checkFile(fileArray[i]);
                }//if
                else
                {
                    checkDirectory(fileArray[i]);
          }//else
                }//for
      }//if
      }//try
    catch (SecurityException se )
    {
        System.out.println(se);
      }
  }//checkDirectory(File dir)

    private String getExtension(File f)
    {
        if(f != null)
        {
        String filename = f.getName();
        int i = filename.lastIndexOf('.');
        if(i>0 && i<filename.length()-1)
        {
                return filename.substring(i+1).toLowerCase();
        }
        }
        return null;
    }

    private void checkFile(File fil)
    {
        //check om det er en java-fil
        if(!getExtension(fil).equals(extension))
            return;
       
        resultat.append(fil.getName() + "\n\n");
       
      try
        {       
            FileReader fileReader = new FileReader(fil);//indlæser filen
            BufferedReader bufferReader = new BufferedReader(fileReader);//laver en bufferedReader
                   
            while(bufferReader.ready())// så længe der er linier
            {
                String linie = bufferReader.readLine();
               
                StringBuffer sb = new StringBuffer(linie);

                if(linie.length() > 0)//hvis linien er større end 0
                {
                    int wordLaengde = soegeToken.length();
                    int linieLaengde = linie.length();
                   
                    for(int i=0; i<linieLaengde-wordLaengde+1; ++i)
                    {
                        String temp = "";
                       
                        for(int j=0 ; j<wordLaengde; ++j)
                            temp = temp + sb.charAt(j+i);
                       
                        if(soegeToken.equals(temp))
                        {
                            resultat.append(fjernMellemrum(new String(linie))  + "\n");
                            break;
                        }//if
                    }//for
                }//if > 0
            }//while
            resultat.append("\n --------------------------slut------------------------------ \n\n");
        }//****try slut
        catch (IOException e)
        {
        System.out.println("Der var en IO-exception");
        }//****catch slut
  }//countLines(File dir)

    public String fjernMellemrum(String tempLinie)
    {
        StringBuffer sbuf = new StringBuffer(tempLinie);
       
        while(sbuf.charAt(0) == ' ' || sbuf.charAt(0) == '    ')
        {
            sbuf.deleteCharAt(0);
        }
       
        return sbuf.toString();
    }
   
    public static void main(String args[])
    {
        TokenHandler test = new TokenHandler(new File("test.txt"), "Rambo", "txt");
        test.soegning();
       
        System.out.println(test.resultat);
    }


}//class
Avatar billede mutantboy Nybegynder
24. juli 2003 - 10:38 #5
okay Mikkelbm, jeg siger tak for dine inflæg. Jeg ved ikke horfor jeg ikke har tænkt over at jeg kan gøre det i databasen. Her er pointene.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester