1. Jeg vil gerne opdele min streng efter punktum og komma. Komma er ikke noget problem, men jeg har ikke kunnet finde ud af hvordan jeg også skiller efter punktum. Jeg har ikke kunnet finde svaret i API'en, blot set at punktum bruges til at angive en hvilken som helst karakter.
2. Jeg kan bruge trim til at fjerne mellemrum i begge ender af en streng, men hvis jeg har mere end et mellemrum et sted i en streng, og så laver en split på den streng, får jeg i mit array også nogle tomme strenge. Hvordan kan jeg undgå det?
Vil det så også løse problemet med de tomme strenge ved mellemrum? Det er i 2 omgange, jeg gør der, først splitter jeg på komma og punktum, løber arrayet igennem og splitter så på mellemrum.
He he, ja jeg testede også din forrige kode, og det virkede jo fint :) Jeg vil nu også godt lige for en god ordens skyld høre hvordan man gør det tilsvarende med regulære udtryk, da jeg ikke har så meget styr på dem, og gerne vil lære lidt om dem.
Hmm...det får mig egentlig til at tænke på, hvad er forskellen egentlig mellem at bruge en StringTokenizer, og så regulære udtryk? De ser lidt ens ud for mig.
Det er okay, jeg regnede heller ikke med at du ville gøre det, jeg mente blot at jeg vil lade spørgsmålet stå åben da det egentlig var regulære udtryk, jeg oprindeligt havde i tankerne. Men du skal nok få point, når jeg lige har set om nogle kan hjælpe mig mht. regulære udtryk.
Det er netop det jeg i forvejen havde kigget på, men uden at få noget brugbart ud af det. Men okay, så langt så godt. Men som jeg skrev, skal jeg først opdele min streng efter punktum og komma. Det streng array jeg så får ud af det, må gerne indeholde mellemrum. Så kører jeg igennem hver streng i arrayet og splitter så på mellemrum.
Så hvis jeg har forstået det rigtige kan jeg splitte på mellemrum ved at bruge split("* *"); eller hvad?
Jeg kan for øvrigt se at jeg da i det mindste selv har været inde på noget af det rigtige, jeg havde split("\.|,"), jeg var blot ikke klar over at det skulle puttes ind i parenteser.
splitte på eet og kun et mellemrum: split( " " ); //bare et mellemrum i strengen splitte på eet eller flere mellemrum split( " +" ); // + betyder 'mindste 1, men gerne flere'
* betyder at der slet ikke behøver at være noget, eller også tegnet foran såmange gange det skal være. nødvendig ovenfor fordi . og , jo ofte står lige efter et ord uden noget imellem.
så skal der nok stå \\. istedet for kun \. (det kommer an på hvor tæt fortolkningen af den parameter er på fortolkningen af den regular expression parameteren indeholder)
Hmm, jeg hader de åbenlyse løsninger, der er når man ikke kan se skoven for bare træer :( Hvis I begge vil smide et svar, så er der point, det virker fint nu :)
med hensyn til forskellen på StringTokenizer og String split
API docs siger:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
The following example illustrates how the String.split method can be used to break up a string into its basic tokens:
String[] result = "this is a test".split("\\s"); for (int x=0; x<result.length; x++) System.out.println(result[x]);
så SUN's holdning er klar, men inden man nu hopper på vognen så check lige dette program:
Arne, jeg læste også API'en og det var derfor jeg foretrak en regexp løsning. Men det jeg mente er hvad forskellen er i hvordan de finder resultatet. Jeg mener med en StringTokenizer er det åbenbart nok bare at skrive de tegn man vil splitte på, mens man bruger regulære ekspressions i den anden, men er de ikke lige gode? Ja, det er svært at forklare helt hvad jeg mener, jeg håber det er forståeligt.
og med så meget andet der er mere generelt så koster det en lille smule
du kan lave en regexp med præcist samme funktionalitet som ved brug af StringTokenizer
performance kan du måle med ovenstående program
Synes godt om
Ny brugerNybegynder
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.