簡體   English   中英

在小寫字符串上執行string.tolowercase的性能

[英]performance of string.tolowercase on a lower case string

我想知道toLowerCase對String的影響。 這里的字符串長度可以變化到50個字符,也可以是小寫字母。

在我們的例子中,我們需要檢查用戶輸入的字符串,然后以小寫形式將該輸入保存在數據庫中,並在大卷上進行檢查。

因此,我應首先檢查大小寫不匹配,然后直接應用String.toLowerCase OR,或者在每個字符串上應用String.toLowerCase() ,包括小寫字符串。

有沒有更好的方法來處理這種情況,牢記性能?

提前致謝。

在開始構建新字符串之前,Openjdk會在內部檢查是否存在任何非小寫字符:

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

SUN 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.");
}

如果你選擇檢查上面的那些你必須執行for loop + if condition和那么難看所以我認為最好與toLowercase()一起使用所有字符串+ toLowercase()實際上為你執行這些操作

在我的職業生涯中,我不得不解析一些大文件(放氣后> 1GB)。 根據我的經驗,直接調用toLowercase()而不是進行檢查然后調用它是個好主意。

String.toLowerCase經過優化,僅在必要時才創建新的String,請嘗試此操作

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

產量

true

我認為允許數據庫使用觸發器進行轉換可能比在java中執行字符串操作更好。 我沒有對此進行測試,但您可能會嘗試查看是否存在性能差異。

在表上定義觸發器

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM