Znalazłem to w jakimś kodzie, który chciałem zoptymalizować. Oto snipet:Czy to normalne zachowanie w regex Java?
tempString = bigBuffer.replaceAll("\\n", "");
tempString = tempString.replaceAll("\\t", "");
Potem zdecydowałem się użyć wyrażenia regularnego mądrze i zrobiłem tak:
tempString = bigBuffer.replaceAll("[\\n\\t]", "");
Wtedy przyjaciel powiedział mi to zrobić w zamian:
tempString = bigBuffer.replaceAll("\\n|\\t", "");
Ponieważ lubię znać wynik moich zmian, zrobiłem test, aby sprawdzić, czy to była dobra optymalizacja. Tak więc wynik z (java wersja "1.6.0_27") jest z pierwszym kodem będącym odniesieniem 100%.
Z rurką to 121%, więc wykonanie tego zadania zajęło więcej czasu.
Za pomocą wspornika kwadratowego jest to 52%, więc wykonanie tego zadania zajęło mniej czasu.
Dlaczego regex zachowuje się inaczej tam, gdzie powinno być to samo?
Martin
Dlaczego to powinno być to samo? – BoltClock
Uważam, że powinno być tak samo, ponieważ robi to samo. Być może kompilator potrzebuje optymalizacji, gdy potok jest używany z pojedynczym znakiem. – Martin