Jaka byłaby różnica między implementacją zastąpienia Java w wersji 1.3.2 a implementacją Apache 2.3? Czy występuje wzrost wydajności jeden nad drugim?Implementacja Apache StringUtils vs Java replace()
Odpowiedz
Metoda, z którą się łączysz, ma dwie wartości: char
, więc zastępuje ją tylko inną (prawdopodobnie kilka razy, mimo to).
Z drugiej strony metoda StringUtils.replace()
przyjmuje wartości String
jako ciąg wyszukiwania i zastępowania, dzięki czemu może zastąpić dłuższe podciągi.
Porównywalną metodą w Javie będzie replaceAll()
. replaceAll()
prawdopodobnie będzie wolniejszy niż metoda StringUtils
, ponieważ obsługuje wyrażenia regularne, a zatem wprowadza narzut związany ze skompilowaniem ciągu wyszukiwania i uruchomieniem wyszukiwania regex.
Zauważ, że Java 5 wprowadzone String.replace(CharSequence, CharSequence)
który robi to samo co StringUtils.replace(String,String)
(oprócz tego, że rzuca NullPointerException
jeśli którykolwiek z jego argumenty są null
). Zauważ, że CharSequence
jest interfejsem zaimplementowanym przez String
, więc możesz używać tutaj zwykłych starych obiektów String
.
+1 dla wskazania, że java.lang.String.replaceAll (...) używa regex i działa wolno.Algorytm używany przez StringUtils.replace (...) jest o wiele lepszy i przewyższa replaceAll() –
@JoachimSauer, odpowiedź na http://stackoverflow.com/a/4874768/910201 wymienia '.replaceEach()', ale skąd pochodzi? Nie mam dostępu do takiej metody i próbowałem zaimportować 'org.springframework. util.StringUtils', 'org.apache.soap.util.StringUtils',' org.apache.axis.utils.StringUtils' oraz 'com.ibm.wsdl.util.StringUtils'. – Xonatron
@MatthewDoucette: odpowiedź jest w komentarze do odpowiedzi, do których się przyłączyłeś: Apache Commons-Lang 'StringUtils' od wersji 2.4. –
1.4.2 zastępuje działa tylko z char
argumentów podczas gdy Apache 2.3 weźmie w ciągi.
Apache's jest trochę szybszy, o ile dobrze pamiętam. Zalecana.
jak to jest faste? r? Czy masz analizę porównawczą lub algorytmiczną? – Bozho
Użyłem go w projekcie po wykonaniu testów, tak. Już ich nie mam. Myśląc o tym, gdyby nie było lepiej, dlaczego mieliby to rozwinąć? Kto zamierza dodać wolniejszą opcję 'replace()' do projektu String Utils? :-) – Brian
w 1.4.2 nie było 'String.replace (ciąg, ciąg)'. Tak było potrzebne w commons. Następnie dodano 1.5. – Bozho
String.replace(char, char)
nie może zastąpić całe ciągi- można mieć
null
wartości zStringUtils.replace(..)
.
zrobi to samo, jeśli pierwszy ciąg znaków ma wartość -nowy. W przeciwnym razie będzie ona rzucać NullPointerException
Zauważalne, nullable dzięki! –
public class Compare {
public static void main(String[] args) {
StringUtils.isAlphanumeric(""); // Overhead of static class initialization for StringUtils
String key = "0 abcdefghijklmno" + Character.toString('\n') + Character.toString('\r');
String key1 = replace1(key);
String key2 = replace2(key);
}
private static String replace1(String key) {
long start = System.nanoTime();
key = StringUtils.replaceChars(key, ' ', '_');
key = StringUtils.replaceChars(key, '\n', '_');
key = StringUtils.replaceChars(key, '\r', '_');
long end = System.nanoTime() - start;
System.out.println("Time taken : " + end);
return key;
}
public static String replace2(String word) {
long start = System.nanoTime();
char[] charArr = word.toCharArray();
int length = charArr.length;
for (int i = 0; i < length; i++) {
if (charArr[i] == ' ' || charArr[i] == '\n' || charArr[i] == '\r') {
charArr[i] = '_';
}
}
String temp = new String(charArr);
long end = System.nanoTime() - start;
System.out.println("Time taken : " + end);
return temp;
}
}
Czas wykonania: podejmowane 6400
Czas: 5888
czasy są prawie takie same!
Mam edytowany kod odpaść kosztów ogólnych replace2
które nie były z powodu realizacji JDK.
Aby zastąpić ciąg znaków innym ciągiem przy użyciu StringUtil.Replace
, spróbowałem wykonać następujące czynności i działa to dobrze, aby zastąpić wiele wartości ciągu z jednego ciągu.
String info = "[$FIRSTNAME$]_[$LASTNAME$]_[$EMAIL$]_[$ADDRESS$]";
String replacedString = StringUtil.replace(info, new String[] { "[$FIRSTNAME$]","[$LASTNAME$]","[$EMAIL$]","[$ADDRESS$]" }, new String[] { "XYZ", "ABC" ,"[email protected]" , "ABCD"});
Spowoduje to zastąpienie wartości String info z nowo podanej wartości ...
- 1. Błąd: (3, 0) Przyczyna: org/apache/fotografia/lang3/StringUtils
- 2. SQL Server 2005 implementacja MySQL REPLACE INTO?
- 3. Implementacja REST RQL Java
- 4. Apache Spark vs Apache Ignite
- 5. Apache Spark vs. Apache Storm
- 6. Hot Replace Replace Code (eclipse)
- 7. JAXB vs Apache XMLBeans
- 8. Xapian vs Apache Solr
- 9. Komparator vs Apache BeanComparator
- 10. Apache Spark vs Apache Spark 2
- 11. DownloadManager VS Własna implementacja pobierania?
- 12. HSSFWorkbook vs XSSFWorkbook vs SXSSFWorkbook - Apache POI
- 13. Implementacja Java OCR
- 14. Implementacja niestandardowej bariery Java
- 15. Implementacja java drzewa segmentowego
- 16. Implementacja RNTN w java
- 17. Najlepsza implementacja logowania w PHP/MySQL/Apache
- 18. Eclipse Virgo vs Apache Servicemix
- 19. Confluent Platform vs Apache kafka
- 20. Airbnb Airflow vs Apache Nifi
- 21. Apache Camel: errorHandler vs onException?
- 22. Spring DriverManagerDataSource vs apache BasicDataSource
- 23. Google Dataflow vs Apache Storm
- 24. Samouczki Apache Solr java
- 25. Apache Java XMLRPC biblioteka
- 26. Apache MINA vs netty dla Androida
- 27. Java: 32-bitowa implementacja fp Math.sqrt()
- 28. Implementacja sieci neuronowej w java
- 29. implementacja enum wewnątrz interfejsu - Java
- 30. Implementacja interfejsu Java w Scala
Czy istnieje konkretny powód pytasz o starej wersji Java? –
Cześć, Jochim, im utknęłam w starej wersji Java, którą muszę utrzymywać. :( –
Zwróć uwagę, że 'String.replace (CharSequence, CharSequence)' używa wewnętrznie regexp. :(Zobacz http://stackoverflow.com/questions/16228992/commons-lang-stringutils-replace-performance-vs-string-replace – Vadzim