Avatar billede tri Nybegynder
11. juni 2002 - 13:05 Der er 7 kommentarer og
2 løsninger

Søge i en String

Denne metoden finder ; i en string.

    final char s1 = ';';
            char[] s = linje.toCharArray();

            for (int i = 0; i < linje.length(); i++) {
                char x = s[i];
                    if ((x == s1))
                       

Mellem hver ; er der en tekst, som jeg ønsker at hive over i en string.
Hvordan gør jeg det?


Hvis jeg f.eks. søger i denne string:
1;6;01-01-2002;;01-01-2002;;;;

vil jeg have:
1
6
01-01-2002
01-01-20002
Avatar billede carstenknudsen Nybegynder
11. juni 2002 - 13:23 #1
Til at søge i strenge benyttes indexOf
metoden
String s = "Dette er en streng";
int i = s.indexOf( "en" );
så er i = 9.
Hvis du vil have delt en streng op
som i det nederste tilfælde skal
du bruge StringTokenizer klassen.
StringTokenizer st = new StringTokenizer("1;6;01-01-2002;;01-01-2002;;;;",";",false);
while( st.hasMoreTokens() ) {   
System.out.println(st.nextToken());
}
Avatar billede lyhr007 Nybegynder
11. juni 2002 - 13:25 #2
Jeg vil lære at bruge regulære udtryk, det kan jo være du for bruge for at parse(søge) i en String en anden gang.

// Create a pattern to match
Pattern p = Pattern.compile("[;]*");
// Split input with the pattern
String[] result = p.split("1;6;01-01-2002;;01-01-2002;;;;");
  for (int i=0; i<result.length; i++)
    System.out.println(result[i]);


Jeg har ikke lige haft tid til at teste den, men den burde virke.

*** ASUMPTION IS THE MOTHER OF ALL FUCK UPS***
Avatar billede tri Nybegynder
11. juni 2002 - 13:34 #3
ok.

lige et andet spg.

Når jeg søger i en fil bruger jeg metoden readLine()

bufr = new BufferedReader(new FileReader(fil));
String linje = "";
linje = bufr.readLine(); 


Men hvordan finder jeg det totale antal rækker på mit BufferedReader objekt?
altså antal rækker i den fil jeg søger i?
Avatar billede carstenknudsen Nybegynder
11. juni 2002 - 13:37 #4
lyhr007: den splitter alt for aggressivt
så den skal lige rettes til for at man
kan få det resultat tri ønsker.
Avatar billede carstenknudsen Nybegynder
11. juni 2002 - 13:40 #5
Det kan du ikke få, du må læse hele filen
igennem for at finde antallet af linier.
Du kan altid læse ind til en liste
som senere kan omformes til en array:
BufferedReader br = new BufferedReader(new FileReader(fil));
List lines = new ArrayList();
String line;
while ( ( line = br.readLine() ) != null ) {
lines.add( line );
}
int numLines = lines.size();
Avatar billede lyhr007 Nybegynder
11. juni 2002 - 13:45 #6
Med mindre Java's regulære udtryk er anderledes, vil følgende betyde:

Pattern p = Pattern.compile("[;]*");

hvis tegnet ; er der 1-uendeliggange skal vi tilføje en ny.



-----------------


import java.io.*;

class cat  {

  public static void main (String args[]) {
 
    String thisLine;

  //Loop across the arguments
  for (int i=0; i < args.length; i++) {

    //Open the file for reading
    try {
      BufferedReader br = new BufferedReader(new FileReader(args[i]));
      while ((thisLine = br.readLine()) != null) { // while loop begins here
        System.out.println(thisLine);
      } // end while
    } // end try
    catch (IOException e) {
      System.err.println("Error: " + e);
    }
  } // end for
 
} // end main

}


Hvilket vil sige at du skal lave en tælle variable og løbe alle Lines igennem indtil du for null tilbage.
Avatar billede carstenknudsen Nybegynder
11. juni 2002 - 13:49 #7
lyhr007: din kode splitter op i enkelt
karakterer????
Avatar billede disky Nybegynder
11. juni 2002 - 13:59 #8
Bortset fra det performer Regexp noget dårligere end StringTokenizer
Avatar billede tri Nybegynder
11. juni 2002 - 23:07 #9
takker
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