Er der nogen der kan forklare mig, hvorfor StringBufferen er synchronized i funktionen "public static String replace(String s, String sub, String with)"? Der bruges jo ingen variabler til deling ml. trådene.
public static void append(StringBuffer buf, String s, int offset, int length) { synchronized(buf) { int end=offset+length; for (int i=offset; i<end;i++) { if (i>=s.length()) break; buf.append(s.charAt(i)); } } }
Jeg kiggede lidt i String.java - den replace metode er implementeret med regex metoder (selvom den ikke laver regex som replaceAll goer) - det er derfor den er langsom.
hmmm... Det forklarer det jo. Men utroligt at man her i 2006 med Java 6.0 selv skal implementerer sin egen string replace! Er der nogen der kan give mig en forklaring på hvorfor Sun ikke har lavet en ordentlig String.replace ?
hvis du vil vide hvorfor skal du jo egentligt spørge nogen hos SUN
men skulle jeg gætte så er det gået ca. sådan:
Java 1.4:
man introducerer regex i Java
en meget smart men måske ikke særlig praktisk programmør tilføjer replaceAll metoden til String
den har super funktionalitet fordi den bruger regex
Java 1.5:
det vælter ind med klager over replaceAll fra brugere som ikke har læst docs grundigt nok og ikke kan forstå at replace af "\\s", "." og diverse andre strenge giver andre resultater end de forventer
yngste programmør får til opgave at lave en replace som ikke bruger regex
han cloner replaceAll metoden som den replace vi diskuterer og nøjes med at tilføj Pattern.LITERAL så den ignorerer regex betydning
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.