07. april 2004 - 14:58Der er
21 kommentarer og 1 løsning
Klip del af en streng ud
Hejsa Jeg har en meget lang String, som jeg skal have klippet en del ud af. En del af stenger ser sådan her ud: "Route length: <b>12,3"Den del jeg skal bruge er i dette tilfælde de 12,3 og den skal jeg have konverteres til en double. Tallet er ikke nødvendigvis på 2 cifre, men har altid en og kun en decimal. Hvordan gennemsøger jeg nemmest en streng og klipper den del ud? Det ville faktisk være mest optimalt hvis man kunne gøre det baglæns, da den del jeg skal bruge ligger sidsst i stengen.
Det er vel noget StringTokenizer jeg skal bruge, men det er jeg ikke lige super skarp i, så jeg håber på lidt hjælp.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Output: val = 12,3 val = 10,0 val = 0,3 val = 0 val = 7 val = 5,7 Det regulære udtryk skal muligvis tilpasses.. Vær dog opmærksom på at "." matcher et hvert tegn.
Hej Søren tak for svaret. Jeg tror desværre ikke jeg har udtrykt mig godt nok :( Jeg skal bruge tallet og kun tallet i strengen. Strengen kunne fx se sådan her ud ".....Route length: <b>12,3 km bla bla bla".
den måde jeg havde forestilt mig, at man kunne hive tallet ud var ved at søge i strengen til man finder "Route length: <b>"og så derfra ellers kopierer et tegn ad gangen over i en stringbuffer. Der skulle så kopieres til og med det tegn, der kommer efter kommaet, da det ikke nødvendigvis er et to cifret tal.
Hej til dig også soreno. Havde ikke lige set dit forslag, da jeg postede min sidste kommentar. Men i den streng jeg har er der mange andre tal - jeg er bare kun interesseret i det tal som kommer efter "Route length: <b>". Kan man stadig bruge et regulært udtryk til at finde det med?
Det går ikke så godt med Pattern pattern = Pattern.compile("<b>[0-9]+,?[0-9]*"); Hvis jeg fjerner <b> kommer samtlige tal, hvis <b> er der kommer der ingen ud. Lige for at være lidt mere besvær, så er der også masser af <b> i min streng. Det unikke er "Route length: <b>", da det er det eneste sted i strengen det står og da tallet jeg skal bruge kommer lige efter det.
det jeg hæftede mig ved var, at du skrev "da den del jeg skal bruge ligger sidsst i stengen."
Derfor forestillede jeg mig at substring var en passende måde..
Hvis der derimod står <b>1,34 kilo</b>
så er det nok bedst at hente ud med RegExp (man kunne dog lave en pointer, som så kiggede på næste char og spurge sig selv om det var enten [0-9] . eller , -- og i så tilfælde føje det til en StringBuffer --- Men jeg er bange for at det bliver for ineffektivt...
Jeg laver gerne et regulært udtryk der matcher #1 og #2, men det kan desværre ikke blive lige nu. Konen står og rykker i mig for at lave noget køkkenarbejde..
Ja, min formulering ligger vist ikke ligefrem til top-karakter - sorry Men du har helt ret bearhugx - jeg kan faktisk præcisere det yderligere: 1) Finder "Route length : <b>" 2) Udtrækker [0-9] "," indtil der mødes et " " 3) Gemmer udtrækket i en variabel
Som det er nu har jeg den dataene i en StringBuffer, kan man søge i den på sammevis som i en streng eller bør man lave en streng via stringbuffer.toString() ?
Ja, man kan meget med regulære udtryk, men ikke alt. f.eks. kan man ikke lave et regulært udtryk der matcher et vilkårligt palindrom.
Dette regulære udtryk: String pattern = "Route length: <b>\\s*((\\d+,\\d+)|(\\d+))\\s*km";
matcher: "Route length: <b>" efterfulgt af [0-k] spaces efterfulgt af "tal" efterfulgt af [0-k] spaces efterfulgt af "km"
Hvis vi snakker performance er regulære udtryk (den type som Java bruger, dvs. baseret på en nondeterministisk endelig automat) ikke nødvendigvis specielt hurtigt. Men det er meget nemmere at rette til (og overskue), end subString og charAt osv.
Mange tak for al hjælpen til jer begge og specielt til soreno. Jeg kan helt klart bruge det du har postet soreno, så hvis du smider et svar, så er der points til dig :)
Der var iøvrigt ikke lige noget for dig at skrive en artikkel om regulære udtryk? Jeg vil i hvert fald være en af de første til at læse det - fattter ikke meget af hvad der sker... Kan iøvrigt se der er en del der har fået hjælp med det.
Nå, men det var bare lige noget jeg kom til at tænke på.... :)
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.