常见类---String类

一.String类的概述:

1.String类:代表字符串
2.字符串是常量,一旦被赋值,其值不能在改变
方法区:有一个内存区域:字符串常量池
如果我们创建一个字符串对象,给对象赋值,这个值会在常量池找,有的话,就返回,没有在常量池开辟空间

public class Demo2{
    public static void main(String[] args) {
        //创建字符串对象
        String s = "hello" ;    
        s += "world" ;

        System.out.println("s:"+s);
    } 
}

结果:
s:helloworld

内存图解:
这里写图片描述

3.练习:
String s1 = new String(“hello”);创建了几个对象
String s2 = “hello” ;创建了几个对象
s1:创建了两个对象
s2:创建了一个对象,指向常量池中
分析:
这里写图片描述

4.看程序写结果

public class Demo3{
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        System.out.println(s3 == s1 + s2);
        System.out.println(s3.equals((s1 + s2)));

        System.out.println(s3 == "hello" + "world");
        System.out.println(s3.equals("hello" + "world"));
    }
}

结果:
false
true
true
true

分析:
字符串变量相加,先开辟空间,在相加
字符串常量相加,先相加,然后在常量池中,是否有这个值,由直接返回地址值,没有就创建
==和equals的区别:
==:默认比较的是地址值
equals:比较的是内容


二.String类常见的方法

构造方法

  1. public String():无参构造
  2. public String(byte[] bytes):将字节数组转换成字符串
  3. public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
  4. public String(char[] value):将字符数组转换成字符串
  5. public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串
  6. public String(String original):将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
  7. 举例:
public class Demo1 {
    public static void main(String[] args) {
        //无参构造:
        String s = new String() ;

        //空字符序列
        System.out.println(s);

        //返回字符串长度
        System.out.println(s.length());
        System.out.println("-----------------------");


        //public String(byte[] bytes):将字节数组转换成字符串
        //构造一个字节数组,静态初始化
        byte[] bys = {97,98,99,100,101} ;
        String s2 = new String(bys) ;
        System.out.println(s2);
        System.out.println(s2.length());

        //public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
        String s3 = new String(bys, 0, 3) ;
        System.out.println(s3);
        System.out.println(s3.length());

        System.out.println("-------------------------");


        //创建一个字符数组
        char[] ch = {'a','b','c','d','e','f','g','h','i'} ;
        //public String(char[] value):将字符数组转换成字符串
        String s4 = new String(ch) ;
        System.out.println(s4);
        System.out.println(s4.length());
        System.out.println("-------------------------");

//      public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串:char[] value,int index,int length
        String s5 = new String(ch, 5, 4) ;
        System.out.println(s5);
        System.out.println(s5.length());

        //public String(String original):将一个常量转换字符串:由于String 是不可变的,所以无需使用此构造方法
        String s6 = new String("hello") ;
        System.out.println(s6);
        System.out.println(s6.length());



        //创建字符串对象s6相当于 s7字符串对象的创建方式
        String s7 = "hello" ;
        System.out.println(s7);
        System.out.println(s7.length());        
    }
}
结果:
0
-----------------------
abcde
5
abc
3
-------------------------
abcdefghi
9
-------------------------
fghi
4
hello
5
hello
5

String的获取功能

  1. int length():获取字符串的长度
  2. char charAt(int index):返回指定索引处的字符
  3. int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引
    int indexOf(String str):返回指定字符串在此字符串第一次出现的索引
    int indexOf(int ch,int fromIndex):返回此字符中从指定位置开始后第一次出现的索引
    int indexOf(String str,int fromIndex):返回此字符串中从指定位置开始后第一次出现的索引
  4. String substring(int start):从指定位置开始截取, 默认截取到末尾(包含start这个索引)
    String substring(int start,int end):从指定位置开始截取到指定位置结束(包含start,不包含end—包左不包右)
  5. 举例:
public class Demo4 {
    public static void main(String[] args){
        //定义一个字符串
        String s = "helloworld";

        //int length():获取字符串的长度
        System.out.println(s.length());

        //char charAt(int index):返回指定索引处的字符
        System.out.println(s.charAt(4));

        //int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引
    System.out.println(s.indexOf('l'));

        //int indexOf(String str):返回指定字符串在此字符串第一次出现的索引
        System.out.println(s.indexOf("el"));

        //String substring(int start,int end):从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置
        System.out.println(s.substring(4, 8));
    }
} 

结果:
10
o
2
1
owor

String的转换功能

  1. byte[] getBytes():将一个字符串转换字节数组
  2. char[] toCharArray():将一个字符串转换成字符数组
  3. static String valueOf(char[] chs):将字符数组转换成字符串
    static String valueOf(int i):将int类型的数据转换字符串
    注意:String类中的valueOf方法可以将任何数据类型转换成String
  4. String toLowerCase():将字符串转换成小写
    String toUpperCase():将字符串转换成大写
  5. String concat(String str):字符串拼接功能
public class Demo5{
    public static void main(String[] args) {
        String s1 = "HelloWorld";

        //byte[] getBytes():将一个字符串转换字节数组
        byte[] arr = s1.getBytes();
        for(int i = 0 ;i < arr.length ; i ++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.println("-----------");

        //char[] toCharArray():将字符串转换为字符数组
        char[] chs = s1.toCharArray();

        //static String valueOf(char[] chs):将字符数组转化为字符串(静态方法用类名调用)
        String s2 = String.valueOf(chs);
        System.out.println(s2);
        System.out.println("------------");

        //String toLowerCase():将字符串转换成小写
        System.out.println(s1.toLowerCase());
        System.out.println("------------");

        //String toUpperCase():将字符串转换成大写
        System.out.println(s1.toUpperCase());
        System.out.println("------------");

        String s3 = "java";
        System.out.println(s1.concat(s3));  
    }
}
结果:
72 101 108 108 111 87 111 114 108 100 
-----------
HelloWorld
------------
helloworld
------------
HELLOWORLD
------------
HelloWorldjava

String的替换功能

  1. String replace(char old,char new):将老的字符替换成一个新的字符
  2. String replace(String old,String new):替换字符串
  3. String trim():去除字符串两端空格
public class Demo6 {
    public static void main(String[] args) {
        String s1 = " helloworld ";

        //String replace(char old,char new):将老的字符替换成一个新的字符
        System.out.println(s1.replace('o', 'l'));

        //String replace(String old,String new):替换字符串
        System.out.println(s1.replace("llo", "eee"));

        //String trim():去除字符串两端空格
        System.out.println(s1.trim());
    }
}

结果:
 helllwlrld 
 heeeeworld 
helloworld

四.String类的综合练习

1.把数组中的数据按照指定格式拼接成一个字符串
举例:int[] arr = {1,2,3};
  输出结果:[1, 2, 3] String类型

public class Demo7 {
    public static void main(String[] args) {
        //静态初始化一个数组
        int[] arr = {1,2,3};

        //定义一个空字符串
        String s = "";

        //先拼接开始的符号
        s += "[";

        //遍历数组进行拼接
        for(int i = 0 ; i < arr.length ; i ++){
            if(i == arr.length-1){
                s += arr[i];
                s += "]";
            }else{
                s += arr[i];
                s += ",";
            }
        }

        //输出字符串
        System.out.println(s);
    }
}

结果:
[1,2,3]

2.字符串反转
举例:键盘录入”abc” 输出结果”cba”

public class Demo8 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        String s = sc.nextLine();

        //将字符串转换为字符数组
        char[] c = s.toCharArray();

        //定义一个空的字符串
        String s2 = "";

        //反向遍历字符数组并进行拼接
        for(int i = c.length-1 ; i >= 0 ; i --){
            s2 += c[i];
        }

        //输出字符串
        System.out.println(s2);
    }
}

结果:
abc
cba

3.统计大串中小串出现的次数

import java.util.Scanner;

/*统计大串中小串出现的次数*/
public class Demo9 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串(长串):");
        String s = sc.nextLine();

        System.out.println("请输入一个字符串(小串):");
        String s2 = sc.nextLine();

        //定义一个统计次数的遍历
        int count = 0;

        //查找大串中小串第一次出现的索引
        int index = s.indexOf(s2);

        //如果找不到,返回-1;如果找到,分步截取,count++
        while(index != -1){
            count ++ ;
            //现在index索引和java所在的字符串长度作为起始位置
            int startIndex = index + s2.length();

            //再次截取大字符串,返回一个新的字符串,把新的字符串赋值给s
            s = s.substring(startIndex);

            //新的字符串在查找小字符串第一次出现的索引:继续查
            index = s.indexOf(s2);
        }

        System.out.println(count);
    }
}

结果:
请输入一个字符串(长串):
helloworldjavahellohelloworld
请输入一个字符串(小串):
world
2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值