Avatar billede dennish Nybegynder
27. november 2003 - 16:41 Der er 15 kommentarer og
1 løsning

StringTokenizer til at finde bestemte ord i en tekstfil

Jeg har følgende fil:

00110010111000000000 The Borg    10  10  1.0  954  327  439  44.5%  1969 100.0%  88.6%  8.6%
01111111110110100100 The Borg    10    9  1.0  1087  354  424  44.4%  2002  90.0%  74.4%  7.7%
11111010111100100001 The Borg    10    8  1.0  1164  402  462  45.6%  1785  80.0%  80.0%  6.9%
01110001110000101101 The Borg    10    7  1.0  1180  407  453  46.3%  2112  70.0%  58.5%  6.0%
11110100010001000010 The Borg    10    7  1.0  1414  444  422  45.2%  1988  70.0%  56.2%  6.0%

Er der nogen der ved hvordan jeg fanger første position, og de sidste 3 i hver linie ?. dvs jeg vil gerne fange

00110010111000000000, 100.0%,  88.6%,  8.6%
01111111110110100100,90.0%,    74.4%    7.7%

osv.

De skal lige bemærkes at filen er en lang fil og ved hver linie skift vises der et [] i notetpad. Ved ikke om det har betydning
Avatar billede arne_v Ekspert
27. november 2003 - 16:45 #1
Prøv med:

String[] words = line.split(" ");

words[0]
words[words.length-3]
words[words.length-2]
words[words.length-1]
Avatar billede trolle Nybegynder
27. november 2003 - 17:11 #2
for hver linje i filen:

StringTokenizer st = new StringTokenizer(linjen," ",false);
String start = "";
if(st.hasMoreTokens()) start = st.nextToken();
String last1="";
String last2="";
String last3="";
while(st.hasMoreTokens()){
  out1 = out2; out2 = out3;
  out3 = st.nextToken();
}
String samlet = start+" "+out1+" "+out2+" "+out3+"\n";
// goer hvad du vil med den samlede streng
Avatar billede dennish Nybegynder
27. november 2003 - 17:42 #3
trolle>> hvor får du out1, out2 og out 3 fra ??
Avatar billede arne_v Ekspert
27. november 2003 - 17:44 #4
Jeg tror han mener last1, last2 og last3.
Avatar billede arne_v Ekspert
27. november 2003 - 18:28 #5
Det her virker ihvertfald (jeg måtte lige ændre p.g.a. flere mellemrum):

public class FirstAndLast {
    public static void main(String[] args) {
        String line = "00110010111000000000 The Borg    10  10  1.0  954  327  439  44.5%  1969 100.0%  88.6%  8.6%";
        String[] words = line.split("[ ]+");
        System.out.println(words[0] + " " + words[words.length-3] + " " + words[words.length-2] + " " + words[words.length-1]);
    }
}
Avatar billede dennish Nybegynder
27. november 2003 - 20:49 #6
Lige en kommentar det er ikke nok at jeg fanger første:
00110010111000000000, 100.0%,  88.6%,  8.6%

Jeg skal også fange alle de andre. I ovenstående eksempel er der 5 x "resultatsæt". Der bliver måske muligt at der er 50 af slagsen. Så jeg skal have lavet noget koder der tager højde for dette. Arne kigger lige på din kode
Avatar billede arne_v Ekspert
27. november 2003 - 21:00 #7
Du læser vel en linie ind ad gangen og processer den.
Avatar billede dennish Nybegynder
27. november 2003 - 21:02 #8
Det er egentlig rigtig arne, for hver linie skal jeg oprette et objekt med en set metode.
Avatar billede dennish Nybegynder
27. november 2003 - 22:49 #9
Hej arne har lave følgende kode. Men nu fanger den første linie. Jeg kan ikke lige gennesku min while løkke. For hver gennemløb i løkken skal den tage 1 linie og gemme den i et objekt. Det er jo goså fint med din kode, men jeg kan ikke lige gennemskue hvordan jeg får min metode til at gennemløbe alle mine dna strenge

//dna = en dna string
public void tokenDnaString()
    {
       
        StringTokenizer st = new StringTokenizer(indDNA," ",true);
       
        String[] words = indDNA.split("[ ]+");
        System.out.println(words[0] + " " + words[words.length-3] + " " + words[words.length-2] + " " + words[words.length-1]);
       
          while(st.hasMoreTokens())
        {
            st.nextToken();
           
            //System.out.println("antal gange");   
           
        }
       
       

           
    }
Avatar billede arne_v Ekspert
27. november 2003 - 22:53 #10
Jeg tænkte i baner af:

            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("data.fil")));
            String line;
            while ( (line = reader.readLine()) != null) {
              String[] words = line.split("[ ]+");
              System.out.println(words[0] + " " + words[words.length-3] + " " + words[words.length-2] + " " + words[words.length-1]);
            }

men det kan laves på mange måder.
Avatar billede dennish Nybegynder
27. november 2003 - 23:19 #11
jeg behøves nu ikke nu input reader da jeg har en metode der indlæser filen og sender den vider til min metode tokenDnaString()
Avatar billede arne_v Ekspert
27. november 2003 - 23:21 #12
Du står med en String som indeholder alle linierne adskilt af \n ?
Avatar billede dennish Nybegynder
27. november 2003 - 23:40 #13
Ja jeg har en string som hedder indDNA. Den indeholder alle mine data. Åbnet i notepad ser den sådan ud: 

00110010111000000000 The Borg    10  10  1.0  954  327  439  44.5%  1969 100.0%  88.6%  8.6%
01111111110110100100 The Borg    10    9  1.0  1087  354  424  44.4%  2002  90.0%  74.4%  7.7%
11111010111100100001 The Borg    10    8  1.0  1164  402  462  45.6%  1785  80.0%  80.0%  6.9%
01110001110000101101 The Borg    10    7  1.0  1180  407  453  46.3%  2112  70.0%  58.5%  6.0%
11110100010001000010 The Borg    10    7  1.0  1414  444  422  45.2%  1988  70.0%  56.2%  6.0%

Det er denne sting som jeg skal tokenize. For hver string skal jeg oprettet et objetkt som har get'er og set'er
Avatar billede dennish Nybegynder
27. november 2003 - 23:42 #14
Jeg er for hver linie kun interesseret i pos 1 og de sidste 3.
00110010111000000000 100.0%  88.6%  8.6%
01111111110110100100 90.0%  74.4%  7.7%
11111010111100100001 80.0%  80.0%  6.9%
osv..
Avatar billede arne_v Ekspert
28. november 2003 - 07:46 #15
Så vil jeg nok tilbage til StringTokenizer se:

import java.util.StringTokenizer;

public class FirstAndLast {
    public static void parse(String data) {
        StringTokenizer st = new StringTokenizer(data, "\n");
        while(st.hasMoreTokens()) {
            String line = st.nextToken();
            String[] words = line.split("[ ]+");
            System.out.println(words[0] + " " + words[words.length-3] + " " + words[words.length-2] + " " + words[words.length-1]);
        }
    }
    public static void main(String[] args) {
        String data = "00110010111000000000 The Borg    10  10  1.0  954  327  439  44.5%  1969 100.0%  88.6%  8.6%\n" +
                      "01111111110110100100 The Borg    10    9  1.0  1087  354  424  44.4%  2002  90.0%  74.4%  7.7%\n" +
                      "11111010111100100001 The Borg    10    8  1.0  1164  402  462  45.6%  1785  80.0%  80.0%  6.9%";
        parse(data);
    }
}
Avatar billede dennish Nybegynder
28. november 2003 - 08:29 #16
TUSINDE TAK ARNE, you have saved my day :-). ups jeg har kommet at afvise dit første svar. Men jeg kan da godt oprettet et nyt spørgsmål så du kan få nogle point
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