30. december 2003 - 15:47Der er
28 kommentarer og 2 løsninger
Udvælgelse fra en streng
Hejsa
Jeg sidder og leger lidt med et program, der kan udregne diverse oplysninger til et spil.
Jeg indlæser f.eks. følgende streng: 29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene
Hvordan kan man udpille "!N! MOr's ThaCina", "64185", "vandt" og "FenrisUlvene"
De dele af strengen, der ønskes fra strengen varierer meget både i længde og navn, så det er en generel metode til at udpille disse værdi, og ikke for specifik for ovenstående eksempel.
Det eneste der ligger fast fra gang til gang er dato angivelsen : "29-12-2003 21:48" den er altid 16 tegn lang.
Jeg går ud fra at følgende ting er faste: 29-12-2003 21:48 (dato og tid, 16 tegn lang) (#X) (hvor X er det nummer) fra din klan et angreb mod (#X) (hvor X er det nummer) ) fra
Dvs: Navnet er fra tegn 17 og til positionen af det første "(#" Tallet er fra positionen af "(#" + 1 og til position af det første ")" "Vandt" er fra positionen af "fra din klan" + 13 og til pos af "et angreb mod" - 1 Modstanderen er fra ("mod" + 4) og til pos af "(#" Modstanderens tal er fra det andet ("(#" + 3) og til ")" Modstanderens klan er fra det sidste "fra" og resten af strengen.
Det godt være at jeg har taget fejl antal tegn, men det kan man nemt rettes. Jeg kan desværre ikke lave det for dig, da jeg ikke programmerer i Java. Men Java-programmører burde få en ide til hvordan det kan gøres.
Takker mange gange for bidraget. Det gav i hvert fald et forslag til hvordan det kan løses, samt noget at arbejde udfra. Må tilstå jeg slet ikke havde tænkt på en sådan opdeling :o)
Jeg ha lavet det i JavaScript.. så skal du bare have en eller anden til at oversætte de:
<script type="text/JavaScript"> <!-- var str = "29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene"; var dato = str.substring(0, 16) var ven_navn = str.substring(18, str.indexOf("(#") - 1); var ven_nummer = str.substring(str.indexOf("(#") + 2, str.indexOf(")")); var vt = str.substring(str.indexOf("fra din klan") + 13, str.indexOf("et angreb mod") - 1); str = str.substring(str.indexOf(vt), str.length); var fjende_navn = str.substring(str.indexOf("mod") + 4, str.indexOf("(#") - 1); var fjende_nummer = str.substring(str.indexOf("(#") + 2, str.indexOf(")")); var fjende_klan = str.substring(str.indexOf("fra") + 4);
You have chosen to download J2SE(TM) v 1.4.2 with NetBeans(TM) IDE v 3.5.1 Cobundle. Download j2sdk-1_4_2-nb-3_5_1-bin-windows.exe . Filesize = 92,575,712 bytes.
public class RecParse { public static void parse(String s) { Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ )([^\\(]*)(\\(#)([0-9]+)(\\) fra din klan )([a-z]+)( et angreb mod )([A-Za-z0-9]+)( \\(#)([0-9]+)(\\) fra )([A-Za-z0-9]+)"); Matcher m = p.matcher(s); m.find(); System.out.println(m.group(2)); System.out.println(m.group(4)); System.out.println(m.group(6)); System.out.println(m.group(12)); } public static void main(String[] args) { parse("29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene"); } }
Smag og behag er igen forskellig - jeg hader de der "lille installere som henter fra nettet" - man ved aldrig hvad man henter og man kan ikke genskabe en installation, så jeg ville tage den store.
public class RecParse { public static void parse(String s) { Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ )([^\\(]*)(\\(#)([0-9]+)(\\) fra din klan )([a-z]+)( et angreb mod )([A-Za-z0-9 \\[\\]]+)( \\(#)([0-9]+)(\\) fra )([A-Za-z0-9 ]+)"); Matcher m = p.matcher(s); m.find(); System.out.println(m.group(2)); System.out.println(m.group(4)); System.out.println(m.group(6)); System.out.println(m.group(12)); System.out.println("===="); } public static void main(String[] args) { parse("29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene"); parse("23-12-2003 22:20 !N! Eazy-E (#51480) fra din klan vandt et angreb mod Kong Ellesar [Jul] (#57065) fra Thors Hammer"); } }
public class RecParse { public static void parse(String s) { Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ )([^\\(]*)(\\(#)([0-9]+)(\\) fra din klan )([a-z]+)( et angreb mod )([^\\(]+)( \\(#)([0-9]+)(\\) fra )(.+)"); Matcher m = p.matcher(s); m.find(); System.out.println(m.group(2)); System.out.println(m.group(4)); System.out.println(m.group(6)); System.out.println(m.group(12)); System.out.println("===="); } public static void main(String[] args) { parse("29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene"); parse("23-12-2003 22:20 !N! Eazy-E (#51480) fra din klan vandt et angreb mod Kong Ellesar [Jul] (#57065) fra Thors Hammer"); } }
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.