Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用`string.startsWith()`方法忽略大小写?_Java_String - Fatal编程技术网

Java 如何使用`string.startsWith()`方法忽略大小写?

Java 如何使用`string.startsWith()`方法忽略大小写?,java,string,Java,String,我想使用string.startsWith()方法,但忽略大小写 假设我有String“Session”,并且在“Session”上使用startsWith,那么它应该返回true 如何实现这一点?一个选项是将两者转换为小写或大写: "Session".toLowerCase().startsWith("sEsSi".toLowerCase()); 这是错误的。见: 另一种选择是使用方法,该方法使用一个布尔参数,说明是否进行区分大小写的匹配。您可以这样使用它: String haystac

我想使用
string.startsWith()
方法,但忽略大小写

假设我有
String
“Session”,并且在“Session”上使用
startsWith
,那么它应该返回
true

如何实现这一点?

一个选项是将两者转换为小写或大写:

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
这是错误的。见:


另一种选择是使用方法,该方法使用一个布尔参数,说明是否进行区分大小写的匹配。您可以这样使用它:

String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5));  // true
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
它检查从索引
0
到长度
5
区域是否存在于从索引
0
到长度
5
干草堆中。第一个参数是
true
,表示它将进行不区分大小写的匹配


如果你是正则表达式的忠实粉丝,你可以这样做:

String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5));  // true
System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));
(?i)
嵌入标志用于忽略大小写匹配

试试这个

myString.toLowerCase().startsWith(starting.toLowerCase());
String session = "Session";
if(session.toLowerCase().startsWith("sEsSi".toLowerCase()))
你总能做到

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

您可以使用
someString.toUpperCase().startsWith(somesotherstring.toUpperCase())
使用
toUpperCase()
toLowerCase()
在测试字符串之前对其进行标准化。

我知道我迟到了,但是使用Apache Commons Lang 3中的StringUtils.startsWithIgnoreCase()怎么样

例如:

StringUtils.startsWithIgnoreCase(string, "start");
只需将以下依赖项添加到pom.xml文件中(假设您使用Maven):


org.apache.commons
commons-lang3
3.11

事实上,假设有一个表有超过10万个条目,我在特定列上使用for循环来解析所有这些条目,在这一点上,我尝试使用上面的这个小写选项来搜索以特定模式开始的条目。因此,这会导致性能问题。如果根本没有找到匹配项,那么它将在内部解析所有条目,这将花费大量时间,同时它也将转换为小写。那么,还有其他解决性能问题的方法吗?@Rohit Jain,实际上是:
System.out.println(“Session.toLowerCase().startsWith(“Session.toLowerCase())不是propper解决方案。您可以尝试这样做:
System.out.println(“SessIon.toLowerCase().startsWith(“SessIon.toLowerCase()))带有vm参数
-Duser.country=TR-Duser.language=TR
在本例中,
I
是大写的
I
这里最大的问题是性能。对于小字符串没有问题,但是如果你有一个大字符串。。。我是说。。。你真的会在1mb字符串中使用toUpperCase来比较4-10个独立字符吗?哼,即使我不明白为什么我要比较1mb字符串的起始部分,那么如果我只对4-10个初始字符感兴趣,我会使用子字符串,然后规范化并完成…这个答案(以及本文中找到的所有其他答案)是错误的。如果查看
String.equalsIgnoreCase()
的实现,您会发现需要比较字符串的小写和大写版本,然后才能最终返回
false
。请参阅以获取替代答案。此答案不正确,因为toLowerCase()在内部使用Locale.getDefault()更改字符,这可能导致误判。比如说,你想把“斯坦布尔”和“伊斯坦布尔”进行比较。在土耳其语中,“İ”的小写等价物是“ı”。因此,当我尝试这样做时,
“İstanbul”.toLowerCase().startsWith(“伊斯坦布尔”.toLowerCase())
(在Locale.Turkish环境中),它会给我错误的答案。@Nemesis,这个答案是错误的,把它作为公认的答案可能会误导很多人。请编辑您的答案并链接到Rohit Jain答案。没有理由关闭此问题。无论如何,最好的解决方案是使用
string.regionMatches(true,0,prefix,0,prefix.length())这不会产生“规范化”两个字符串的成本。@AlexanderAbakumov我很好。正确的答案张贴在我的评论上面。这比改变字符串的大小写要有效得多。最好升级为一个答案而不是一个评论。