算法专题之字符串


要处理有关字符串的编程题,肯定是要用到java的字符串操作的api了

string的api

  • toCharArray
    String string=“hello world”;
    char[] chars=string.toCharArray();
    结果是: [h,e,l,l,o, ,w,o,r,l,d] 【转字符数组】

  • substring
    String string=“hello world”;
    String substr=string.substring(0,3);
    结果是: hel
    【截取的是0,1,2下标的字串(不包括3)-------截取字符】

  • replace
    String string=“hello world”;
    String result=string.replace(“ello”,“i”);
    结果是: hi world 【字符替换】

  • charAt()
    char c=str.charAt(0);
    结果是: h 【按索引值获取字符】

  • split()
    String str=“hello world 233”;
    String[] strs=str.split("\s+");
    在这里插入图片描述
    【按规则划分字符串】

  • indexOf
    String str=“hello world 233”;
    int strs=str.indexOf(“l”,8);
    int index=str.indexOf(“f”);
    System.out.println(strs);
    System.out.println(index);
    结果如下:在这里插入图片描述
    从8号开始查找l,找到的第一个的位置是索引在9号
    从0开始找,没找到就返回-1

  • startsWith

       String str="hello world 233";
       boolean zj=str.startsWith("wor");
       boolean ks=str.startsWith("hell");
       System.out.println(zj);
       System.out.println(ks);

结果:在这里插入图片描述
【检查字符串是否是按指定的keyword开头的】
把string当成char[]数组,里面的每个元素是char

正则表达式规则

  • 正则表达式
    正则表达式是一种特殊的字符串模式,用于匹配一组字符串

贪婪量词
“*”(贪婪) 重复零次或更多
“+”(懒惰) 重复一次或更多次
“?”(占有) 重复零次或一次
“{n}” 重复n次
“{n,m}” 重复n到m次
“{n,}” 重复n次或更多次

懒惰限定符
“*?” 重复任意次,但尽可能少重复
“+?” 重复1次或更多次,但尽可能少重复
“??” 重复0次或1次,但尽可能少重复
“{n,m}?” 重复n到m次,但尽可能少重复
“{n,}?” 重复n次以上,但尽可能少重复

元字符
“^” :^会匹配字符串的起始位置
" " " : 会匹配字符串的结尾
“\w”:匹配字母,数字,下划线.
“\d”: 匹配数字
“\b” : 匹配单词边界
“\s”:匹配空格
[a-z]匹配a至z的所有字母

几种反义
写法很简单改成大写就行了,意思与原来的相反,这里就不举例子了
“\W” 匹配任意不是字母,数字,下划线 的字符
“\S” 匹配任意不是空白符的字符
“\D” 匹配任意非数字的字符
“\B” 匹配不是单词开头或结束的位置
“[^abc]” 匹配除了abc以外的任意字符

捕捉分组
String line = “This order was placed for QT3000! OK?”;
String pattern = "(\D*)(\d+)(.)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
则打印: m.group(0),m.group(1),m.group(2) ,m.group(3)
}
结果如下:【0组是整个字符串,1是匹配3000
以前的,剩下的就是3000! OK?,2组就是在3000! OK?的基础上进行匹配,3组把3000匹配了,4组就是在! OK?里面去继续匹配字符】在这里插入图片描述

java字符正则表达式编程模板

 // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(\\D*)(\\d+)(.*)";
 
      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);
 
      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
         System.out.println("Found value: " + m.group(3) ); 
      } else {
         System.out.println("NO MATCH");
      }

参考链接

菜鸟教程
在线正则表达式测试网站0
在线正则表达式测试网站1
在线正则表达式测试网站2

发布了437 篇原创文章 · 获赞 82 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_41063141/article/details/103660356