繁体   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