java字符串相关知识整理(字符串概念、常量池、api、正则表达式及字符串简单例题)

1.字符串的概念

多个字符(char)连接起来组合成的字符序列。例如:“中国”。

2.常量池

字符串的定义方式:
1).

String  s = "Hello World";//创建对象并引用到常量池中
String  s1 = "Hello World";//从常量池中引用,不创建新的对象。

定义s时,JVM通过字符串常量池查找不到内容为"Hello World"的字符串对象存在,那么会创建这个字符串对象,然后将刚创建的对象的引用放入到字符串常量池中,并且将引用返回给变量s。
定义s1时,JVM通过查找字符串常量池,发现内容为”Hello World”字符串对象存在,于是将已经存在的字符串对象的引用返回给变量s1。这里不会重新创建新的字符串对象s与s1指向同一对象,即s=s1。
在这里插入图片描述

2).使用new创建

String s = "Hello World";//创建对象并引用到常量池中
String s1 = new String("Hello World");//建立新的对象

使用new来构造字符串对象的时候,不管字符串常量池中有没有相同内容的对象的引用,新的字符串对象都会创建在堆内存中s与s1不指向同一对象,此时s1 != s 。
在这里插入图片描述

3.字符串-常用Api

1)length():显示字符串长度。

	String s ="hello";
	System.out.println(s.length());//显示字符串长度:5

2)toCharArray():将字符串转为数组。

    String s = "hello";
	char[] c = s.toCharArray();//建立新的数组,将s复制进新的数组中。
	System.out.println(Arrays.toString(c));//打印结果:[h,e,l,l,o]

3)charAt():根据位置找到字符串中某个字符。

    String s = "hello";
	System.out.println(s.charAt(1));//显示1位置的字符:e
	for(int i = 0 ; i<s.length();i++) {
	     System.out.print(s.charAt(i)+"\t");//依次按位置显示字符: h e l l o 
	}

4)toUpperCase()/toLowerCase():将字符串转为大写/小写。

    String s = "hello";
	String s1 =s.toUpperCase();//将字符串转为大写
	System.out.println(s1);//HELLO
	
	System.out.println(s1.toLowerCase());//将字符串转为小写:hello

5)compareTo()/equals():比较字符串大小(字符串进行比较大小时依照同一个字符位置进行比较:结果为0则相等,结果为正则前者大于后者,结果为负则前者小于后者) /判断字符串是否相等。

    String s = "hello";
	String s1 ="HELLO";
	System.out.println(s.equals(s1));//判断字符串是否相等:flase
	System.out.println(s.equalsIgnoreCase(s1));//不区分大小写判断字符串是否相等:true
	System.out.println(s.compareTo(s1));//比较字符串大小:结果为正,即s>s1。

6)trim()/isEmpty():去掉字符串首位/尾位的空格。/判断字符串是否为空。

    String s = "hello ";
	System.out.println(s.length());//显示字符串长度:6
	System.out.println(s.trim().length());//去掉字符串首尾空格,显示新字符串的长度:5
	System.out.println(s.isEmpty());//判断字符串是否为空:flase

7)subString()/subString( , ):从当前位置截取之后的字符串形成新的子字符串(包含当前位置字符)。/从前者位置截取到后者位置的字符串形成新的子字符串(不包含后者位置的字符)。

    String s = "hello-world";
	System.out.println(s.substring(6));//截取s[6]之后的字符串:world
    System.out.println(s.substring(0, 5));//[0,5).截取s[0]到s[4]的字符串:hello

8)indexOf()/lastIndexOf()/indexOf(char, ):找到某个字符的位置。/找到某个字符的最后一个位置。/从后者位置开始找第一个需要字符的位置。

       String s = "hello-world-java";
	   System.out.println(s.indexOf("-"));//找到‘-’的位置:5
       System.out.println(s.lastIndexOf('-'));//找到最后一个‘-’的位置:11
       System.out.println(s.indexOf("-", 6));//从s[6]开始找‘-’的位置:11

9)concat():将两个字符串连接起来。

	String s = "hello";
	String s1 = "-world";
	System.out.println(s.concat(s1));//拼接两个字符串:hello-world

10)replace():将字符串中的某个字符或字符串替换为新的字符或字符串。

    String s = "hello";
	System.out.println(s.replace("hello", "world"));//结果:world
	System.out.println(s.replace("h", "w"));//结果:wello

4.正则表达式

1.概述:正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
2.普通字符:
1)[abc]:匹配 […] 中的所有字符(只选取一个)。

    String s = "a";
    String pattern = "[abc]";//匹配字符串中是否含有[abc]中的一个
    System.out.println(s.matches(pattern));//结果:true

2 )[ ^abc]:匹配除了 […] 中字符的所有字符。

    String s = "a";
    String pattern = "[^abc]";//匹配字符串中是否含有除过[abc]的字符
    System.out.println(s.matches(pattern));//结果:false

3)[A-Z]:[A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字。

    String s = "a";
    String pattern = "[^abc]";//匹配字符串中是否含有[a-z]区间的字符
    System.out.println(s.matches(pattern));//结果:true

4). :匹配除换行符(\n、\r)之外的任何单个字符,相等于 [ ^\n\r]。

    String s = "a";
    String pattern = ".";//匹配除换行符(\n、\r)之外的任何单个字符
    System.out.println(s.matches(pattern));//结果:true

5)\w:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]。

    String s = "a";
    String pattern = ".";//匹配字母、数字、下划线
    System.out.println(s.matches(pattern));//结果:true

在这里插入图片描述
3.限定符
在这里插入图片描述
代码如下:

    String s = "hello";
    System.out.println(s.matches("[a-z]*"));//结果:true
    System.out.println(s.matches("[a-z]+"));//结果:true
    System.out.println(s.matches("[a-z]?"));//结果:false
    System.out.println(s.matches("[a-z]{5}"));//结果:true
    System.out.println(s.matches("[a-z]{5,}"));//结果:true
    System.out.println(s.matches("[a-z]{0,5}"));//结果:true

4.特殊符号
1)| :左右两边表达式之间 “或” 关系,匹配左边或者右边
2)()
···在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
···取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
代码如下:

判断数字是否在1860之间
    String s = "61";
    String pattern = "([2-5][0-9])|(1[8-9])|(60)";
    System.out.println(s.matches(pattern));//结果:false

5.其他运算方法
1)replaceAll():根据正则表达式进行字符串的替换。

找到字符串的字母部分
    String s = "h4e4l7l0o5wor4ld0";
	String pattern = "[^a-z]";//非字母。即只要字母
	System.out.println(s.replaceAll(pattern,""));//结果:helloworld

2)split():将字符串按照正则表达式规则拆分为字符串数组

	String s = "刘备-关羽-张飞";
	String pattern = "-";
	String[] s1 = s.split(pattern);
	System.out.println("大哥:"+s1[0]);//结果:大哥:刘备
	System.out.println("二哥:"+s1[1]);//结果:二哥:关羽
	System.out.println("三弟:"+s1[2]);//结果:三弟:张飞

5.简单例题

1.将一个字符串进行反转,例如:”abcd” ➡ “dcba”。
  循环方法:  
       public void test() {
          String s = "abcd";
          char[] cha =s.toCharArray();
        for(int i = 0;i<cha.length/2;i++) {
    	   char c = cha[i];
    	   cha[i] = cha[cha.length-1-i];
    	   cha[cha.length-1-i]=c;
       }
       s = new String(cha);
       System.out.println(s);
	}
StringBuilder方法:
     public void test() {
        String s = "abcd";
        StringBuilder s1 = new StringBuilder(s);
        StringBuilder s2 =s1.reverse();
        s=s2.toString();
        System.out.println(s);
	}
2. 判定输入的一个字符串是否全为数字,使用两种方式完成。
循环方式:	
       public void test() {
       String s = "45651";
       char[] cha = s.toCharArray();
       boolean f= true;
       for(int i = 0;i<cha.length;i++) {
    	   if(cha[i]<='0'||cha[i]>='9') {
    		  f=!f;
    		  break;
    	   }
        }
            System.out.println(f);
    }
正则表达式:
    public void test() {
       String s = "1561";
       String pattern = "[0-9]+";
       System.out.println(s.matches(pattern));
    }
3. String str =<h1>这是测试结果</h1><p>test a</p>;  去除标签字符串。
    public void test() {
		String s ="<h1>这是测试结果</h1><p>test a</p>";
		String pattern = "(<[a-z][0-1]*>)|(</[a-z][0-1]*>)";
		s =s.replaceAll(pattern, "");
		System.out.println(s);
	}
4.输入一个由小写字符组成的字符串,统计出每个字符出现的次数。
   public void test() {
		String s ="ajdiosajidnlkcxzlkmiasdl";
		char[] cha = s.toCharArray();//将字符串转化为数组
	    int[] count =new int[26];//存储26个字母出现的次数:count[0]---a;
		for(int i = 0;i<cha.length;i++) {
		    count[cha[i]-'a']+=1;//cha[i]-'a' =字符串出现的字母对应的count数组位置。
		}
		for(int i = 0;i<count.length;i++) {
			System.out.println((char)(i+'a')+"出现的次数为:"+count[i]+"次");//char(i+'a')=count数组位置对应的字母。
		}
	    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值