AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!
Ik vermoed dat er ergens een index ofzo niet helemaal goed staat...
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Er is dus tegenwoordig een methode die dit doet (en nog veel meerZynth: deze zouden ze standaard in de String library moeten opnemen vind ik. is een errug handig methodetje
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
De fout die de topicstarter tegen kwam, had ik trouwens al hersteld in mijn eigen code.... Was nogal een stom probleem
Hier is de goede code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
| public class ReplaceTest { public static void main(String[] ps) { String text1 = "dit is een<I><U><B><I></I></B></U></I></I> markup</U>"; StringBuffer text2 = new StringBufer(text1); String[] markuplist ={"<B>","</B>","<U>","</U>","<I>","</I>"}; for(int i=0;i< markuplist.length; i++) { replaceUltraSnel(text2,markuplist[i],""); System.out.println("Na " + markuplist[i] + ", resultaat = " + text2.toString()); } } public static String replaceUltraSnel(String source, String firstString, String newString) { return replaceUltraSnel(new StringBuffer(source), firstString, newString).toString(); } public static StringBuffer replaceUltraSnel(StringBuffer source, String firstString, String newString) { final int firstStringLength = firstString.length(); final int newStringLength = newString.length(); final char[] firstChars = firstString.toCharArray(); final char[] newChars = newString.toCharArray(); if(firstString.length() == newString.length()) { int max = source.length() - firstStringLength; boolean equals = false; for(int i=0; i < max; i++) { equals = true; for(int j=0;j < firstStringLength; j++) { if(source.charAt(i + j) != firstChars[j]) { equals = false; break; } } if(equals) { for(int j=0;j < firstStringLength; j++) { source.setCharAt(i + j, newChars[j]); } i += firstStringLength - 1; } } } else { int max = source.length() - firstString.length() + 1; int dif = newString.length() - firstStringLength; boolean equals = false; for(int i=0; i < max; i++) { equals = true; for(int j=0;j < firstStringLength; j++) { if(source.charAt(i + j) != firstChars[j]) { equals = false; break; } } if(equals) { source.replace(i, i + firstStringLength, newString); i = i + newStringLength - 1; max = max + dif; } } } return source; } } |
Overigens kan je veel beter gebruik maken van de StringBuffer methode ipv steeds de String methode aan te roepen, zie hierboven. Daar is de StringBuffer methode namelijk voor bedoeld
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
1
2
3
4
| public String replaceAll(String regex, String replacement) { return Pattern.compile(regex).matcher(this).replaceAll(replacement); } |
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
En bere traag, zie mijn eerdere bench-markstomato :Ach hoe schoon
Bij herhaling van dezelfde replace zou het een stuk sneller moeten kunnen. Die code zuigt werkelijk IMHO
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Ja heb je helemaal gelijk in natuurlijk, ik zat maar te dollenmbravenboer: Bij herhaling van dezelfde replace zou het een stuk sneller moeten kunnen. Die code zuigt werkelijk IMHO.
Valt me trouwens best tegen dat dergelijke functies echt heel inefficient geimplementeerd blijken
Voor deze keer dantomato: Ja heb je helemaal gelijk in natuurlijk, ik zat maar te dollen
Ja mij ookValt me trouwens best tegen dat dergelijke functies echt heel inefficient geimplementeerd blijken
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Op zich is het wel leuk om die Matcher te optimaliseren
Wat vond je trouwens van mijn String - transformatie taaltje wat ik pas voorstelde als alternatief voor een String lib? Je kunt dit zelfs taal-onafhankelijk maken en naar verschillende talen gaan compileren
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
oja.. voor de liefhebbers.. ik ben al een tijdje bezig met een nieuwe site, (oude was erughhh lelijk
http://www.geocities.com/peter_veentjer
ps. de site is nog lang niet klaar.. maar het gaat om het idee..
Je bedoelt dat taaltje? Dat denk ik dus juist welAlarmnummer: ik denk niet dat ze zo snel worden als low level werk.
Cooloja.. voor de liefhebbers.. ik ben al een tijdje bezig met een nieuwe site, (oude was erughhh lelijk) en heb een tool gemaakt die een boom toevoegd op een html pagina op basis van xml bestandje..
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Zef: we moesten je voordragen voor de Nobelprijs voor Java innovatie
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
http://www.pandoramix.org niet voor niets uit m'n profile gehaaldAlarmnummer: waar is jouw site??
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Hum tja, misschien is dat wel weer zo, maar heb je dan genoeg functies om een lib te vullen?Alarmnummer: ik denk dat de meeste mensen in 90% van de gevallen belangstelling hebben bij eenvoudige replace/find routines.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Verwijderd
Maar waar kiezen jullie normaal voor als het gaat om optimalisatie: geheugen of snelheid? (zit hier namelijk vaak mee)
Is er ergens een artikel beschreven (op het net) die een soort algemene richtlijn/aanwijzing aangeeft?
Meestal komt dit toch op hetzelfde neer bij Java: het maken van nieuwe objecten kost erg veel tijd en uiteraard ook geheugen. Object creatie beperken is dus het aller-belangrijkste en als je dat voorkomt sla je twee vliegen in 1 klap.tijnbraun: Maar waar kiezen jullie normaal voor als het gaat om optimalisatie: geheugen of snelheid? (zit hier namelijk vaak mee)
Dit is een erg goed boek over Java Performance: Java Platform Performance: Strategies and Tactics. Je kan twee voorbeeld hoofdstukken downloadenIs er ergens een artikel beschreven (op het net) die een soort algemene richtlijn/aanwijzing aangeeft?
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
over het algemeen optimaliseer ik nooit (hoogstends algoritme optimalisatie = macro optimalisatie). En als ik moet kiezen dan ga ik voor het besparen van cpu gebruik, gewoon hopen dat er genoeg geheugen isOp zondag 16 december 2001 20:07 schreef tijnbraun het volgende:
compleet offtopic...
Maar waar kiezen jullie normaal voor als het gaat om optimalisatie: geheugen of snelheid? (zit hier namelijk vaak mee)
Is er ergens een artikel beschreven (op het net) die een soort algemene richtlijn/aanwijzing aangeeft?
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public String replaceString(String original, String pattern, String replace) { int originalLength = original.length(); int patternLength = pattern.length(); int lastIndex = 0, index = 0; StringBuffer result = new StringBuffer(originalLength * 2); char[] chars = new char[originalLength]; while((index = original.indexOf(pattern, lastIndex)) >= 0) { original.getChars(lastIndex, index, chars, 0); result.append(chars, 0, index - lastIndex).append(replace); lastIndex = index + patternLength; } original.getChars(lastIndex, originalLength, chars, 0); result.append(chars, 0, originalLength - lastIndex); return result.toString(); } |
Als jullie die nou es in de benchmark gooien
Grtz
Dark
edit: ik weet niet hoe ik kan linken naar een topic maar het noemt: [java] code optimalisatie Daarin veel code en vele algo's - het kwam voort uit dit topic.
[ Voor 26% gewijzigd door hobbit_be op 12-09-2003 17:35 ]
Ik doe 'm even op slot, zodat ie weg kan zakken. Ik gooi 'm later weer open, maar mocht je deze sluitmessage lezen terwijl ie nog op slot zit, en we zijn alweer een tijdje verder, en je hebt wat interessants toe te voegen, mail me dan
.edit: woei ik dacht eraan
[ Voor 20% gewijzigd door .oisyn op 14-09-2003 14:13 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.