2013-05-25 2 views
0

Я хочу знать последствия toLowerCase на Строке. Строка здесь может варьироваться в длину до 50 символов и может быть и в нижнем регистре.Производительность строки. Толкатель на нижней строчке

В нашем случае нам нужно проверить строку, введенную пользователем, а затем сохранить этот ввод в нижнем регистре в базе данных и проверить его на большой громкости.

Так что я должен сначала проверить несоответствие корпуса, а затем применить String.toLowerCase ИЛИ непосредственно всегда применять String.toLowerCase() для каждой строки, включая строчные строки.

Есть ли лучший способ справиться с такими типами ситуаций, когда речь идет о производительности?

Заранее спасибо.

ответ

5

OpenJDK выполняет проверку внутри, есть ли какие-либо не-символы нижнего регистра, прежде чем начать строить новую строку:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.toLowerCase%28java.util.Locale%29

ВС Java работает аналогичным образом (см комментарии ниже), так что есть нет необходимости в дополнительной проверке.


Вы должны быть в состоянии перепроверить (в небольшой тестовой программы) с == выделяет ли ваша версия Java новую строку, даже если не нужно:

String test = "all lower case"; 
if (test == test.toLowerCase()) { 
    System.out.println("The strings are the same object, " + 
     "so toLowerCase performs a check before allocating a new one."); 
} else { 
    System.out.println("A new string object is created even when not needed."); 
} 
+0

Я дам вам +1 за размещение ссылки на источник, но ваша последняя часть не имеет никакого смысла. Он пытается ** избегать ** вызова 'toLowerCase()', и вы вызываете его прямо там ... – acdcjunior

+1

Уточненный в тексте, что эксперимент toLowerCase должен выяснить, что на самом деле делает библиотека. –

+0

Лучше сейчас :) Но я все равно поставлю «----» после этой строки SUN. Btw, я проверил, и Sun (Oracle) JRE реализует почти как OpenJDK. – acdcjunior

2

Если вы решили проверить верхние вам придется выполнять for loop + if condition и это так некрасиво, поэтому я думаю, что это хорошо идти с toLowercase() direcly для всех строк + toLowercase() фактически выполнить эти действия для вас

2

в моей карьере, я должен был работать при разборе некоторых огромных файлов (> 1 ГБ после дефляции). По моему опыту, это хорошая идея, чтобы напрямую позвонить toLowercase() вместо того, чтобы делать чек, а затем позвонить ему.

1

String.toLowerCase оптимизирована для создания новой строки только при необходимости, попробуйте этот

String s = "date"; 
    System.out.print(s == s.toLowerCase()); 

выход

true 
+0

Прочтите вопрос до конца :) – YouYou

0

Я думаю, что позволяет базы данных, чтобы сделать преобразование с помощью триггера может быть лучше чем выполнение строковых манипуляций в java. Я не тестировал это, но вы можете попытаться выяснить, есть ли разница в производительности.

Определение triggers на столе:

CREATE TRIGGER lcase_insert BEFORE INSERT ON my_table FOR EACH ROW 
SET NEW.language = LOWER(NEW.language); 

CREATE TRIGGER lcase_update BEFORE UPDATE ON my_table FOR EACH ROW 
SET NEW.language = LOWER(NEW.language); 
Смежные вопросы