Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
unsigned char allowedChars[256] = {
/* 0x00 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x20 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...
};
...
oldChars[newLen] = ch;
newLen += allowedChars[ch];
java version «1.6.0_24»
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
Linux 2.6.39-2-amd64 #1 SMP Wed Jun 8 11:01:04 UTC 2011 x86_64 GNU/Linux
// здесь проверка что length > 0
int pos = length - 1;
for (int j = pos; j >= 0; --j) {
char ch = oldChars[j];
if (ch >= ' ') {
oldChars[pos] = ch;
--pos;
}
}
if (pos >= 0) {
++pos;
s = new String(oldChars, pos, length - pos);
}oldChars[newLen] = ch; очень отжирает время на запись в память.Вспоминаем, что же именно у нас за строчки и что нам нужно фильтровать и что такое \p{Cntrl}. Понимаем, что этот элемент по сути равнозначен выбору символов с кодами от 0 до 31 включительно, плюс 127.C [0..31] всё ясно, а чем опасен «плюс 127»?
use Benchmark qw(:all);
$precomp = qr/([0-9]+)/;
cmpthese(1000000, {
'simple' => sub { 'Sample 123 numbers' =~ /([0-9]+)/; },
'precompiled' => sub { 'Sample 123 numbers' =~ $precomp; },
});
if (ch >= ' ') {
if (newLen != j) {
oldChars[newLen] = ch;
}
newLen++;
}
class Algoritm{
public char[] buf = new char[1024];
String run(String s){
...
...
if(length > 1024)
buf = new char[length];
char[] oldChars = buf;
...Встроенные Java regexps, во-первых, имеют долбанутый API (подстрекая тем самым излишне часто компилировать одни и те же выражения), во-вторых, достаточно медленны на таких простых операциях; впрочем, о том, что встроенные Java regexps медленныерегэкспы мадленные не в Ява, а сами по себе, будь то РНР или С… например, для усокрения регэкспов придуманы всякие кодогенераторы, типа habrahabr.ru/blogs/regex/117843/ или
Как убрать все управляющие символы из строки — история одной бурной оптимизации