在字符串查找上,很重要一个是不区分大小写的查找,而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不区分大小写查找字符串相关推荐

  1. linux忽略大小写 grep,linux grep不区分大小写查找字符串方法

    grep用来过滤字符串信息,grep默认对字母大小写敏感,不过可以通过选项对grep屏蔽大小写敏感,该选项为 -i. 一.查看grep工具版本方法 图1 grep版本查询 二.grep -i 使用方法 ...

  2. java文件中查找字符串_Java 在本地文件中查找固定字符串

    适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...

  3. js不区分大小写查找字符串

    var reg_huawei = new RegExp("huawei", 'i'); var isHuawei = agent.match(reg_huawei); var re ...

  4. java字符串字符排列组合_如何在Java中查找字符串的所有排列

    java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...

  5. java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现

    使用该lastIndexOf()方法在Java中查找字符串中字符的最后一次出现. 假设以下是我们的字符串.String myStr = "Amit Diwan"; 在上面的字符串中 ...

  6. java找重复字符串_在java中怎样查找重复字符串

    在一段java编程代码中,字符串是不可缺少的一个要素,属于java中的基础知识,字符串不仅在java面试题中会出现,在编写代码时更要掌握怎样使用字符串.在前面我们也学习过关于字符串截取的知识,你应该有 ...

  7. java查找字符位置_java 查找字符串所在的位置代码

    使用了 string 类的 indexof() 方法在字符串中查找子字符串出现的位置,如过存在返回字符串出现的位置(第一位为0),如果不存在返回 -1.方便判断和截取字符串! 语法:stringobj ...

  8. php strpos 区分大小写么?,php查找字符串strpos(), stripos(),strrpos(), strripos()的区别

    strpos – 查找字符串首次出现的位置,strpos() 函数对大小写敏感(区分大小写). stripos – 查找字符串首次出现的位置(不区分大小写) strrpos – 计算指定字符串在目标字 ...

  9. vim查找字符串-全词匹配、不区分大小写

    vim中查找字符串的时候一般有3中需求: 普通查找 命令模式下,按'/'或'?',然后输入要查找的字符,Enter. /和?的区别是,一个向前(下)找,一个向后(上). 全词匹配 如果你输入 &quo ...

最新文章

  1. mysql utf8mb4 造成慢_mysql使用utf8mb4经验吐血总结
  2. php好玩的源码_PHP 经典有趣的算法
  3. 今天参加广州.NET俱乐部活动,运气超好
  4. 安装 3dsMax 2020 there is problem 错误
  5. Arduino、arm、树莓派、单片机四者区别和关系
  6. JESD204B调试1
  7. 智障儿童欢乐多,蹦蹦哒哒过六一:用 Python 开发连连看小游戏
  8. mysql 10张表左关联查询_mysql left join 左连接查询关联n多张表
  9. Timer already cancelled 或者 Task already scheduled or cancelled
  10. android 5.1一键root工具箱,s大师一键root下载
  11. 店盈通:拼多多推广技巧步骤
  12. Linux tmpfs是什么
  13. re学习笔记(57)BUUCTF-re-[FlareOn4]login
  14. servlet,filer,listener 推荐阅读
  15. 阿里云服务器部署javaweb
  16. 【linux】嵌入式linux的组成
  17. OnCreate()与PreCreateWindow()
  18. 系统集成资质取消后 ,偷偷崛起的ICSCE资质(信息化能力和信用评价资质)
  19. 如何保存php网页到桌面,如何将网页保存到电脑桌面上
  20. 泛微OA如何与其他系统实现单点登录

热门文章

  1. Android网页爬虫
  2. DDN区块链受邀为南京2020年区块链技术与应用师资培训班提供实训
  3. Btspread Search Assistant的开发过程
  4. 施米德胡贝,被遗忘的人工智能教父
  5. [AP]无线AP和无线路由的区别
  6. == 和 ===的区别
  7. maya导入abc动画_(送给纠结自学3d建模的同学)自学maya,zbrush,substance一个月的感想...
  8. java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究
  9. 【图像压缩】香农熵和差分进化算法多级图像阈值图像压缩【含Matlab源码 2035期】
  10. SPI实现SST25VF016B驱动(Flash)