java不区分大小写查找字符串
在字符串查找上,很重要一个是不区分大小写的查找,而java的api中没有直接提供这个方法。
public class StringUtil { public static void main(String[] args) { String t="aaaaaaaaaa<table></table>aaa<table></table>"; String s="<TABLE"; // t=""; System.out.println("length="+t.length()); System.out.println(t.indexOf(s,0)); System.out.println(ignoreCaseIndexOf(t, s,0)); System.out.println(t.lastIndexOf(s)); System.out.println(ignoreCaseLastIndexOf(t, s)); }
/** * 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始,不区分大小。 * * @param subject 被查找字符串。 * @param search 要查找的子字符串。 * @return 指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 */ public static int ignoreCaseIndexOf(String subject, String search) { return ignoreCaseIndexOf(subject, search,-1); } /** * 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始,不区分大小。 * * @param subject 被查找字符串。 * @param search 要查找的子字符串。 * @param fromIndex 开始查找的索引位置。其值没有限制,如果它为负,则与它为 0 的效果同样:将查找整个字符串。 * 如果它大于此字符串的长度,则与它等于此字符串长度的效果相同:返回 -1。 * @return 指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 */ public static int ignoreCaseIndexOf(String subject, String search, int fromIndex) { //当被查找字符串或查找子字符串为空时,抛出空指针异常。 if (subject == null || search == null) { throw new NullPointerException("输入的参数为空"); } fromIndex = fromIndex < 0 ? 0 : fromIndex; if (search.equals("")) { return fromIndex >= subject.length() ? subject.length() : fromIndex; } int index1 = fromIndex; int index2 = 0; char c1; char c2; loop1: while (true) { if (index1 < subject.length()) { c1 = subject.charAt(index1); c2 = search.charAt(index2); } else { break loop1; } while (true) { if (isEqual(c1, c2)) { if (index1 < subject.length() - 1 && index2 < search.length() - 1) { c1 = subject.charAt(++index1); c2 = search.charAt(++index2); } else if (index2 == search.length() - 1) { return fromIndex; } else { break loop1; } } else { index2 = 0; break; } } //重新查找子字符串的位置 index1 = ++fromIndex; } return -1; } /** * 返回指定子字符串在此字符串中最右边出现处的索引。 * * @param subject 被查找字符串。 * @param search 要查找的子字符。 * @return 在此对象表示的字符序列中最后一次出现该字符的索引;如果在该点之前未出现该字符,则返回 -1 */ public static int ignoreCaseLastIndexOf(String subject, String search){ if(subject==null){ throw new NullPointerException("输入的参数为空"); } else{ return ignoreCaseLastIndexOf(subject,search,subject.length()); } } /** * 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向查找。 * @param subject 被查找字符串 。 * @param search 要查找的子字符串。 * @param fromIndex 开始查找的索引。fromIndex 的值没有限制。如果它大于等于此字符串的长度,则与它小于此字符串长度减 1 的效果相同:将查找整个字符串。 * 如果它为负,则与它为 -1 的效果相同:返回 -1。 * @return 在此对象表示的字符序列(小于等于 fromIndex)中最后一次出现该字符的索引; * 如果在该点之前未出现该字符,则返回 -1 */ public static int ignoreCaseLastIndexOf(String subject, String search, int fromIndex) { //当被查找字符串或查找子字符串为空时,抛出空指针异常。 if (subject == null || search == null) { throw new NullPointerException("输入的参数为空"); } if (search.equals("")) { return fromIndex >= subject.length() ? subject.length() : fromIndex; } fromIndex = fromIndex >= subject.length() ? subject.length() - 1 : fromIndex; int index1 = fromIndex; int index2 = 0; char c1; char c2; loop1: while (true) { if (index1 >= 0) { c1 = subject.charAt(index1); c2 = search.charAt(index2); } else { break loop1; } while (true) { //判断两个字符是否相等 if (isEqual(c1, c2)) { if (index1 < subject.length() - 1 && index2 < search.length() - 1) { c1 = subject.charAt(++index1); c2 = search.charAt(++index2); } else if (index2 == search.length() - 1) { return fromIndex; } else { break loop1; } } else { //在比较时,发现查找子字符串中某个字符不匹配,则重新开始查找子字符串 index2 = 0; break; } } //重新查找子字符串的位置 index1 = --fromIndex; } return -1; } /** * 判断两个字符是否相等。 * @param c1 字符1 * @param c2 字符2 * @return 若是英文字母,不区分大小写,相等true,不等返回false; * 若不是则区分,相等返回true,不等返回false。 */ private static boolean isEqual(char c1,char c2){ // 字母小写 字母大写 if(((97<=c1 && c1<=122) || (65<=c1 && c1<=90)) && ((97<=c2 && c2<=122) || (65<=c2 && c2<=90)) && ((c1-c2==32) || (c2-c1==32))){ return true; } else if(c1==c2){ return true; } return false; } }
java不区分大小写查找字符串相关推荐
- linux忽略大小写 grep,linux grep不区分大小写查找字符串方法
grep用来过滤字符串信息,grep默认对字母大小写敏感,不过可以通过选项对grep屏蔽大小写敏感,该选项为 -i. 一.查看grep工具版本方法 图1 grep版本查询 二.grep -i 使用方法 ...
- java文件中查找字符串_Java 在本地文件中查找固定字符串
适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...
- js不区分大小写查找字符串
var reg_huawei = new RegExp("huawei", 'i'); var isHuawei = agent.match(reg_huawei); var re ...
- java字符串字符排列组合_如何在Java中查找字符串的所有排列
java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...
- java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现
使用该lastIndexOf()方法在Java中查找字符串中字符的最后一次出现. 假设以下是我们的字符串.String myStr = "Amit Diwan"; 在上面的字符串中 ...
- java找重复字符串_在java中怎样查找重复字符串
在一段java编程代码中,字符串是不可缺少的一个要素,属于java中的基础知识,字符串不仅在java面试题中会出现,在编写代码时更要掌握怎样使用字符串.在前面我们也学习过关于字符串截取的知识,你应该有 ...
- java查找字符位置_java 查找字符串所在的位置代码
使用了 string 类的 indexof() 方法在字符串中查找子字符串出现的位置,如过存在返回字符串出现的位置(第一位为0),如果不存在返回 -1.方便判断和截取字符串! 语法:stringobj ...
- php strpos 区分大小写么?,php查找字符串strpos(), stripos(),strrpos(), strripos()的区别
strpos – 查找字符串首次出现的位置,strpos() 函数对大小写敏感(区分大小写). stripos – 查找字符串首次出现的位置(不区分大小写) strrpos – 计算指定字符串在目标字 ...
- vim查找字符串-全词匹配、不区分大小写
vim中查找字符串的时候一般有3中需求: 普通查找 命令模式下,按'/'或'?',然后输入要查找的字符,Enter. /和?的区别是,一个向前(下)找,一个向后(上). 全词匹配 如果你输入 &quo ...
最新文章
- mysql utf8mb4 造成慢_mysql使用utf8mb4经验吐血总结
- php好玩的源码_PHP 经典有趣的算法
- 今天参加广州.NET俱乐部活动,运气超好
- 安装 3dsMax 2020 there is problem 错误
- Arduino、arm、树莓派、单片机四者区别和关系
- JESD204B调试1
- 智障儿童欢乐多,蹦蹦哒哒过六一:用 Python 开发连连看小游戏
- mysql 10张表左关联查询_mysql left join 左连接查询关联n多张表
- Timer already cancelled 或者 Task already scheduled or cancelled
- android 5.1一键root工具箱,s大师一键root下载
- 店盈通:拼多多推广技巧步骤
- Linux tmpfs是什么
- re学习笔记(57)BUUCTF-re-[FlareOn4]login
- servlet,filer,listener 推荐阅读
- 阿里云服务器部署javaweb
- 【linux】嵌入式linux的组成
- OnCreate()与PreCreateWindow()
- 系统集成资质取消后 ,偷偷崛起的ICSCE资质(信息化能力和信用评价资质)
- 如何保存php网页到桌面,如何将网页保存到电脑桌面上
- 泛微OA如何与其他系统实现单点登录
热门文章
- Android网页爬虫
- DDN区块链受邀为南京2020年区块链技术与应用师资培训班提供实训
- Btspread Search Assistant的开发过程
- 施米德胡贝,被遗忘的人工智能教父
- [AP]无线AP和无线路由的区别
- == 和 ===的区别
- maya导入abc动画_(送给纠结自学3d建模的同学)自学maya,zbrush,substance一个月的感想...
- java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究
- 【图像压缩】香农熵和差分进化算法多级图像阈值图像压缩【含Matlab源码 2035期】
- SPI实现SST25VF016B驱动(Flash)