我想知道toLowerCase
字符串的含义。这里的字符串长度可以变化最多 50 个字符,也可以是小写。
在我们的例子中,我们需要检查用户输入的字符串,然后将该输入以小写形式保存在数据库中,并在大容量上进行检查。
所以我应该先检查大小写不匹配,然后String.toLowerCase
直接应用 OR 总是应用String.toLowerCase()
在每个字符串上,包括小写字符串。
有没有更好的方法来处理这种类型的情况,同时牢记性能?
提前致谢。
我想知道toLowerCase
字符串的含义。这里的字符串长度可以变化最多 50 个字符,也可以是小写。
在我们的例子中,我们需要检查用户输入的字符串,然后将该输入以小写形式保存在数据库中,并在大容量上进行检查。
所以我应该先检查大小写不匹配,然后String.toLowerCase
直接应用 OR 总是应用String.toLowerCase()
在每个字符串上,包括小写字符串。
有没有更好的方法来处理这种类型的情况,同时牢记性能?
提前致谢。
Openjdk 在开始构建新字符串之前会在内部执行检查是否有任何非小写字符:
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.");
}
在我的职业生涯中,我不得不解析一些大文件(放气后>1GB)。根据我的经验,直接调用toLowercase()
而不是检查然后调用它是一个好主意。
如果您选择检查上面的那些,您将不得不执行for loop + if condition
,这太难看了,所以我认为直接使用toLowercase()
所有字符串是很好的 +toLowercase()
实际为您执行这些操作
String.toLowerCase 已优化为仅在必要时创建新字符串,试试这个
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);