java contains忽略大小写_关于java:字符串包含-忽略大小写
本问题已经有最佳答案,请猛点这里访问。
是否可以确定字符串str1="ABCDEFGHIJKLMNOP"是否包含字符串模式strptrn="gHi"? 我想知道当字符不区分大小写时是否有可能。 如果是这样,怎么办?
使用toUpperCase()?
如果您不使用正则表达式:
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
虽然这可能是一个答案,但我认为它不是大型String的好解决方案
这在广泛的Unicode世界中不起作用-请参见stackoverflow.com/a/6996550/372926
像if (file.getName().toLowerCase() .contains(editText.getText().toString().toLowerCase()))
正如所建议的那样,正则表达式将永远是昂贵的。
Unicode的@SamStephens,toLowerCase()将在java7 +中运行。在您的链接中,您可以看到评论的原因。
正确小写。但这并不意味着这种比较适用于所有文化。参见w3.org/International/wiki/Case_folding。他们建议要么指定区域性,要么显式使用区分大小写的比较功能,例如上面显示的containsIgnoreCase。
您可以使用
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
CharSequence searchStr);
Checks if CharSequence contains a search CharSequence irrespective of
case, handling null. Case-insensitivity is defined as by
String.equalsIgnoreCase(String).
A null CharSequence will return false.
这将比regex更好,因为regex在性能方面总是很昂贵的。
有关官方文档,请参考:StringUtils.containsIgnoreCase
更新:
如果你是那些
不想使用Apache Commons库
不想使用昂贵的基于regex/Pattern的解决方案,
不想使用toLowerCase创建其他字符串对象,
您可以使用java.lang.String.regionMatches实现自己的自定义containsIgnoreCase
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
ignoreCase:如果为true,则在比较字符时忽略大小写。
public static boolean containsIgnoreCase(String str, String searchStr) {
if(str == null || searchStr == null) return false;
final int length = searchStr.length();
if (length == 0)
return true;
for (int i = str.length() - length; i >= 0; i--) {
if (str.regionMatches(true, i, searchStr, 0, length))
return true;
}
return false;
}
谢谢。还有很多其他不错的东西,例如indexOfIgnoreCase ...
该方法假设大海捞针的匹配部分的长度与针的长度相同,即为UTF-16代码单元数。因此,如果您搜索"并且字符串包含" SS",即使您忽略大小写,即使这两个字符串相同(在德语语言环境中,当然您也必须在每次执行此操作时都必须设置语言环境)才能找到匹配项那类的东西。)
org.apache.commons.lang3.StringUtils此包在android中不可用
您可以将java.util.regex.Pattern与CASE_INSENSITIVE标志一起使用,以区分大小写:
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
看一下先前的答案@SamStephens写了stackoverflow.com/a/6996550/372926:您必须同时指定CASE_INSENSITIVE和UNICODE_CASE,但仍然不会获得正确的值,因为Java使用完全大小写映射时,它仅使用简单的大小写折叠。这是个问题。"
尝试这个
public static void main(String[] args)
{
String original ="ABCDEFGHIJKLMNOPQ";
String tobeChecked ="GHi";
System.out.println(containsString(original, tobeChecked, true));
System.out.println(containsString(original, tobeChecked, false));
}
public static boolean containsString(String original, String tobeChecked, boolean caseSensitive)
{
if (caseSensitive)
{
return original.contains(tobeChecked);
}
else
{
return original.toLowerCase().contains(tobeChecked.toLowerCase());
}
}
如果要以区分大小写的方式检查值,则传递true作为第三个参数;如果要以不区分大小写的方式检查值,则传递false。
经过优化的Imran Tariq版本
Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();
即使没有引号,Pattern.quote(strptrn)始终返回" Q" + s +" E",隐藏会损害性能。
您应该使用按位|运算符,而不是加法运算符。
java contains忽略大小写_关于java:字符串包含-忽略大小写相关推荐
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java string最大长度_一个Java字符串中到底有多少个字符?
作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...
- java jcombobox 获取值_从java中的JComboBox获取字符串值
我正在做一个testJComboBox程序.一旦我选择了jCombobox的输出,我就会得到我需要的字符串值.但是,它不起作用. 这是我的代码: import java.awt.*; import j ...
- java 查找大写字母_在Java中查找字符串的所有大写字母
因此,我试图在用户输入的字符串中查找所有大写字母,但始终出现此运行时错误: Exception in thread "main" java.lang.StringIndexOutO ...
- 连字符在java中怎么表示_如何在字符串之间添加连字符 - java
我有以下字符串xxxxx,我想添加x-xxxx之类的连字符,如何使用Java? 参考方案 您可以使用String#substring(). String newstring = string.subs ...
- java是什么格式_是java格式
错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...
- java实现泛型检索_高级Java泛型:检索泛型类型参数
java实现泛型检索 在JDK5中引入Java泛型之后, Java泛型Swift成为许多Java程序的组成部分. 但是,乍一看似乎很简单的Java泛型,程序员很快就会迷失此功能. 大多数Java程序员 ...
- java最长类名_在java规范中类命名的字符长度是多少?
展开全部 在java规范中没2113有限制类名的长度,但5261是系统4102本身会限制. 下面是1653详细说明:java这个回语言本身答:没有限制. java虚拟机本身的规范:The length ...
- java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用
Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...
- java数组可扩展_[转载]Java数组扩容算法及Java对它的应用
Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...
最新文章
- 刚刚!我被产品小姐姐的笔记本深深吸引了....
- PHP 端口号 是否 被占用 以及 解决方法
- 石子合并(GarsiaWachs算法)
- mysql 磁盘i o 优化_经典案例:磁盘I/O巨高排查全过程
- php使用cookie获取浏览记录,php 使用COOKIE制作浏览记录_PHP教程
- linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了
- pxe安装linux dhcp失败,利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教...
- 每日简报 5月2日简报新鲜事 每天一分钟 了解新鲜事
- 地产公司新建商业中心调研-调研内容
- python 行列转换_行列转换的Mysql,Excel,Python解法
- docker 之容器编排工具Docker Compose
- 教育学大佬是怎么找外文参考文献的?
- java获取京东token_京东开放服务平台(JOS)关于token问题汇总(一)
- XR迈向10亿级必须解决的3个问题
- GNU C++ 智能指针4-- 解析_Sp_counted_ptr类
- 搞笑决战水源之巅收藏六 师傅
- word 多级标题的编辑
- List、Collections
- 12-render函数
- 温补晶振及压控晶振的技术资料与应用
热门文章
- 【Linux集群教程】11 集群监控 - Zabbix 搭建
- 万凯新材深交所上市破发:募资超30亿 公司市值101亿
- Shell变量(二)
- textaligncenter仍然不居中_你不知道的中华文化,中华文化的根源不是儒家而是河图洛书...
- Paperreading 之二 多人人体姿态估计COCO2017冠军—CPN
- 斐那契波黄金数列MATLAB,广义斐波那契数列的性质及推广
- 微信小程序使用云函数实现客户下单后商家小程序接收订单状态通知(通过发送统一服务消息uniformMessage.send实现)
- python input函数换行_python input函数换行_python_input函数
- 程序员的奋斗史(三十六)——人在囧途之应聘篇(六)——第一季终结篇
- 计算机内打不开小米路由器,win7系统无法访问小米路由器的解决方法