String类语法练习

概述

官方文档:
在这里插入图片描述
从文档中可以获取很多重要的信息

  • 字符串字面值"abc" 可以看成一个字符串对象
  • 字符串式常量,一旦被赋值,就不能被改变

查看文档,发现方法中有重写的toString方法

String toString()
返回此对象本身(它已经是一个字符串!)。

public class Main{

    public static void main(String[] args) {

       String str= "abc";   //"abc"看出字符串常量
       str = "def";           //改变str的引用 使其引用字符串"deg" 原来的"abc"变成垃圾
        System.out.println(str);   //String类重写的toString方法,返回的是该对象本身
    }
}

测试结果:
在这里插入图片描述

String的构造方法

构造方法有很多,选择重要且常用的进行演示
public string():空构造

public string(byte[] bytes):把字节数组转成字符串
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。

public string(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。

public string(char[] value):把字符数组转成字符串
分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

public string(char[] value,int index,int count):把字符数组的一部分转成字符串
分配一个新的 String,它包含取自字符数组参数一个子数组的字符。

public string(String original):把字符串常量值转成字符串
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

public class Main{

    public static void main(String[] args) {

        String s1 = new String();  //空参构造
        System.out.println(s1);

        //注意与ASCII码联系起来
        byte[] arr1 = {97,98,99};
        String s2 =new String(arr1);  //解码,将计算机读的懂的转换成我们读的懂
        System.out.println(s2);

        byte[] arr2 ={97,98,99,100,101,102};
        String s3 = new String(arr2,2,3);  //arr2字节数组从偏移地址为2的位置转换长度为3的字节
        System.out.println(s3);

        char[] arr3 = {'a','b','c','d','e'};
        String s4 =new String(arr3);
        System.out.println(s4);

        String s5 = new String(arr3,1,3);  //将arr3数组从偏移地址为1的位置开始转换长度为3个
        System.out.println(s5);

        String s6 = new String("zzu");
        System.out.println(s6);
    }
}

测试结果:
![](https://img-blog.csdnimg.cn/20190408160659979.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzIyMTAz,size_16,color_FFFFFF,t_70)

String类的判断方法

boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符 串中是否包含小字符串
boolean startswith(String str):判断字符串是否以某个指定的字符串开头
boolean endawith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空。

public class Main{

    public static void main(String[] args) {

        String s1 = "zzu";
        String s2 = "zzu";
        String s3 = "ZZU";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println("**************************");

        System.out.println(s1.equalsIgnoreCase(s2));
        System.out.println(s1.equalsIgnoreCase(s3));
        System.out.println("**************************");

        String s4 = "ZZU is my home";
        String s5 = "home";
        String s6 = "Home";
        System.out.println(s4.contains(s5));  //判断是否包含
        System.out.println(s4.contains(s6));
        System.out.println("**************************");

        System.out.println(s4.startsWith(s3));
        System.out.println(s4.startsWith(s1));
        System.out.println(s4.endsWith(s5));
        System.out.println(s4.endsWith(s6));
        System.out.println("**************************");

        String s7 = " ";
        String s8 = "";
        String s9 =null;
        //""和null的区别:
        // 1.""是字符串常量,同时也是一个String类的对象,既然是对象理应能调用String类中的方法
        // 2.null是空常量,不能调用任何方法,否则会出现空指针异常,null常量可以给任意的引用类型常量赋值
        System.out.println(s1.isEmpty());
        System.out.println(s7.isEmpty());
        System.out.println(s8.isEmpty());
        //System.out.println(s9.isEmpty());  会报错

    }
}

在这里插入图片描述

String类的获取功能

int length():获取字符串的长度。
char charAt(int index):获取指定索引位置的字符
int indexof(int ch):返回指定字符在此字符串中第一次出现处的索引。
int indexof(String str):返回指定字符串在此字符串中第一次出现处的索引。
int indexof(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
int indexof(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
lastIndexof 从后向前找 和上面相同
string substring(int start):从指定位置开始献取字符串,默认到末尾。
string substring(int start,int end):从指定位置开始到指定位置结束戴取字符串。

public class Main{

    public static void main(String[] args) {

        System.out.println("****************");
        int[] arr = {11,22,33,44,55};
        System.out.println(arr.length); //数组中的length是属性
        System.out.println("****************");
        String s1="zzu";
        System.out.println(s1.length());

        String s2 = "哈哈,我疯了";
        System.out.println(s2.length());  //length()方法获取每一个字符的个数,不是字节

        char c1 = s2.charAt(4);
        System.out.println(c1);
        //char c2 = s2.charAt(1000);
        //注意字符索引越界异常

        int index1 = s1.indexOf('z');  //返回第一个哈
        int index2 = s1.indexOf('u');
        int index3 = s1.indexOf('q');  //如果不存在返回-1,同样适于字符串
        int index4 = s1.indexOf("zu");
        System.out.println(index1+","+index2+","+index3+","+index4);

        String s3 = "zzuismylove";
        int index5 = s3.indexOf('u',1);
        System.out.println(index5);
        int index6 = s3.indexOf('u',1);  //没有的话,返回-1
        System.out.println(index6);

        String s4 = s3.substring(5);  //注意越界问题
        System.out.println(s4);
        String s5 = s3.substring(5,7); //包括第一位,不包括最后一位
        System.out.println(s5);
    }
}

结果:
在这里插入图片描述

字符串遍历

public class Main{

    public static void main(String[] args) {

        String s1 = "zzuismylove";
        //通过索引获取每一个字符
        for(int i=0;i<s1.length();i++) {
            char c = s1.charAt(i);
            System.out.print(c);
        }
    }
}

测试结果:
在这里插入图片描述

String类的转换

byte[] getBytes():把字符串转换为字节数姐。
char[] toCharArray():把字符串转换为字符数姐。
介绍第一个其他的大同小异

static String valueof(char[] ch):把字符数姐转成字符串。
atatic String valueof(int i):把int类型的数据转成字符串。
在Java常用工具类中介绍过,不再赘述
·注意:String类的valueOf方法可以把任意类型的数据转成字符串。

String tolowerCase():把字符串转成小写。(了解)
String toUpperCase():把字符串转成大写。
String concat(String atx):把字符串拼接。|

public class Main{

    public static void main(String[] args) {

        String s1 = "abc";
        byte[] arr = s1.getBytes();
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();

        char[] arr2 = {'a','b','c'};
        String s2 = "DEF";
        String s3 = s2.toLowerCase();
        String s4 = s1.toUpperCase();
        System.out.println(s3+","+s4);
        System.out.println(s3+s4);
        System.out.println(s3.concat(s4));


    }
}

结果:
在这里插入图片描述
见识很重要 方法可以这样玩
把zzuismylove字符串的首字母转化成大写,其他的都是小写

public class Main{

    public static void main(String[] args) {

        String s1 = "zzuismylove";
        String s2 = s1.substring(0,1).toUpperCase().concat(s1.substring(1).toLowerCase());
        System.out.println(s2);
    }
}

结果:
在这里插入图片描述
查了查 发现这是"链式编程"
要求 保证每次调用方法后返回的是对象,就可以继续调用

String类的其他对象

String的替换功能
String replace(char old,char new)
String replace(String old,string new)
一个是字符的替换 一个是字符串的替换
不存在的话,就不改变

注意全部含有的old 都替换成newString的去除字符串两空格
String trim()

String的按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str)

public class Main{

    public static void main(String[] args) {

        String s1 = "zzuismylove";
        String s2 = s1.replace('z','Z');  //全部替换哈
        System.out.println(s2);
        String s3 = s1.replace("zzu","zhengzhouuniversity");
        System.out.println(s3);

        String s4 = " love ";
        String s5 = s4.trim();
        System.out.println(s5);

        String s6 = "seven";
        String s7 = "six";
        int num = s6.compareTo(s7);   //比较的的是Unicode码表 与c语言相似
        System.out.println(num);
    }
}

结果:
在这里插入图片描述

注意事项

通过String创建的字符串可能在堆中对象里,也可能在堆的常量池中
String s1 = new String(“abc”);
首先先看常量池中有没有字符串abc
如果没有就进堆内存了
String s2 = “cde”;
在常量池中创建字符串cde 因为字符串不可变 所以有了共享的特性,也就是说这里的一个字符串可以有很多引用变量名名来去使用,所以不会有两个相同的字符串

猜你喜欢

转载自blog.csdn.net/qq_42322103/article/details/89102254