Java字符串

Java字符串

String的特点

程序当中所有用双引号括起来的东西都说字符串不管有没有生成String类

1. 字符串的内容永不可变(重点)

2.字符串永不可变,所以可以共享使用

3.字符串效果相当于char[]数组,但是底层原理是byte[]字节数组

image-20230417183223299

创建字符串

创建字符串的3+1种方法

构造方法:

1.创建一个空白串

2.用字符数组来创建字符串

3.byte数组来创建字符串

直接创建:

直接使用双引号创建

image-20230417184510800

代码示例

public class Demo01 {
    public static void main(String[] args) {
        String str1 = new String();//空构造方法
        System.out.println("第一个字符串:" + str1);
        char charArray[] = {'A', 'B', 'C', 'D'};
        String str2 = new String(charArray);//使用字符数组创建
        System.out.println("第二个字符串:" + str2);
        byte byteArray[] = {97, 98, 99, 100};
        String str3 = new String(byteArray);//使用字节数组创建
        System.out.println("第三个字符串:" + str3);
        //直接创建(创建的也是String对象)
        String str4 = "hello,world!!!";
        System.out.println("第4个字符串:" + str4);


    }
}

字符串常量池

当程序中直接写上双引号字符串,这个字符串就在字符串常量池中

1.对应基本数据类型==比较的是值的大小

2.对于引用数据类型==比较的是地址值

image-20230417190902424

字符串常量池的内存示意图

1.如果用双引号直接创建字符串对象就会放入池中,并且字符串底层使用byte数组是实现,常量池中的字符串对象是一个指向byte数组的引用.

2.当再次使用双引号直接创建相同的字符串对象会直接把原本已经有的字符串对象赋值给新生成的对象

3.如果使用了new关键字就不会创建在字符串常量池当中了,会在堆当中开辟空间.如果使用字符数组创建会把字符数组转化为byte数组

image-20230417190829896

代码示例

public class Demo02 {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        char[] charArry = {'a', 'b', 'c'};
        String str3 = new String(charArry);
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str2 == str3);
    }
}



字符串比较

字符串比较相关方法

  1. ==是进行地址值的比较

  2. 字符串的比较需要用str.equals(),进行比较.字符串相同为true.字符串不同为false

注意事项

  1. 任何对象队可以用Object接收
  2. equals具有对称性a.equals(b)和b.equals(a)相同
  3. 如果比较的是一个常量和一个变量,推荐把常量写在前面

str.equalsIgnoreCase为字符串忽略大小写比较

image-20230418190649912

代码示例

public class Demo01Str {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        char[] charArray = {'a', 'b', 'c'};
        String str3 = new String(charArray);
        System.out.println(str1.equals(str2));//true
        System.out.println(str2.equals(str3));//true;
        System.out.println("abc".equals(str3));//ture
        //如果字符串为一个常量和一个变量推荐把常量写在前面
        String str4 = "abc";
        System.out.println(str4.equals("abc"));//不推荐
        System.out.println("abc".equals(str4));//推荐
        //如果str4=NULL的话不推荐的写法会报错,而推荐的写法是false
        str4=null;
//        System.out.println(str4.equals("abc"));//不推荐..Cannot invoke "String.equals(Object)" because "str4" is null
        System.out.println("abc".equals(str4));//推荐
    }
}
public class Demo01Str {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        char[] charArray = {'a', 'b', 'c'};
        String str3 = new String(charArray);
        System.out.println(str1.equals(str2));//true
        System.out.println(str2.equals(str3));//true;
        System.out.println("abc".equals(str3));//ture
        //如果字符串为一个常量和一个变量推荐把常量写在前面
        String str4 = "abc";
        System.out.println(str4.equals("abc"));//不推荐
        System.out.println("abc".equals(str4));//推荐
        //如果str4=NULL的话不推荐的写法会报错,而推荐的写法是false
        str4=null;
//        System.out.println(str4.equals("abc"));//不推荐..Cannot invoke "String.equals(Object)" because "str4" is null
        System.out.println("abc".equals(str4));//推荐
    }
}


字符串忽略大小比较

只忽略英文大小写

image-20230418192120533

代码示例

import java.sql.SQLOutput;

public class Demo01Str {
    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        char[] charArray = {'a', 'b', 'c'};
        String str3 = new String(charArray);
        System.out.println(str1.equals(str2));//true
        System.out.println(str2.equals(str3));//true;
        System.out.println("abc".equals(str3));//ture
        //如果字符串为一个常量和一个变量推荐把常量写在前面
        String str4 = "abc";
        System.out.println(str4.equals("abc"));//不推荐
        System.out.println("abc".equals(str4));//推荐
        //如果str4=NULL的话不推荐的写法会报错,而推荐的写法是false
        str4=null;
//        System.out.println(str4.equals("abc"));//不推荐..Cannot invoke "String.equals(Object)" because "str4" is null
        System.out.println("abc".equals(str4));//推荐
        String str5="ABC";
        //字符串忽略大小比较
        System.out.println("ABC".equalsIgnoreCase(str5));//true
        System.out.println("Abc".equalsIgnoreCase(str5));//true
    }
}


字符串获取

字符串获取函数

  1. 获取字符串长度
  2. 连接两个字符串并返回新的字符串(!!!重点!!!在Java中字符串是不可改变的)
  3. 获取索引位置的单个字符
  4. 字串查找返回第一次出现的索引,没有返回-1

image-20230418193620462

代码示例

public class Demo02Str {
    public static void main(String[] args) {
        System.out.println("jdoljdofjaofeyrowefjljcdxc".length());//获取字符串长度
        String str1 = "hello";
        String str2 = "world";
        String str3 = str1.concat(str2);
        //在java中字符串不可改变
        System.out.println(str1);//hello
        System.out.println(str2);//world
        System.out.println(str3);
        String str4 = "abcdefg";
        for (int i = 0; i < str4.length(); i++) {
            char ch = str4.charAt(i);

            System.out.println("第" + i + "个位置是字母" + ch);
        }
        System.out.println("abcdefabcdef".indexOf("bcde"));//1
        System.out.println("abcdef".indexOf("aaaa"));//-1

    }
}


字符串转换方法

字符串转换函数

  1. 转换为字符数组

  2. 转换为字节数组

  3. 将旧字符串替换为新字符串

image-20230419175720566

代码示例

public class Demo02 {
    public static void main(String[] args) {
        //替换为字符数组
        //使用toCharArray方法
        char[] chars = "abcdef".toCharArray();
        System.out.println(chars.length);
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
        //替换为字节数组
        //使用getBytes方法
        byte[] bytes = "ABC".getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
        //字符串替换函数
        String str1 = "how how how how";
        System.out.println(str1);
        String str2 = str1.replace("o", "&");
        System.out.println(str2);
        String str3 = str1.replace("ow", "%");
        System.out.println(str3);


    }
}




字符串截取

字符串截取方法

splist()方法,将字串切割为若干部分,返回值为一个字符串数组.()里面其实是一个正则表达式.

正则表达式

注意,如果要按照.切分需要两个(反斜杠)

image-20230419181404607

代码示例

public class Demo03 {
    public static void main(String[] args) {
        String str1 = "abc,def,ghi";
        String arr1[] = str1.split(",");

        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
        System.out.println("===================");
        String str2 = "abc def ghi";
        String arr2[] = str2.split(" ");
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }
        System.out.println("===================");
        String str3 = "abc.abc.abc";
        String arr3[] = str3.split(".");
        System.out.println(arr3.length);

        for (int i = 0; i < arr3.length; i++) {
            System.out.println(arr3[i]);
        }
        System.out.println("===================");
        String str4 = "VVV.VVV.VVV";
        String arr4[] = str4.split("\\.");//需要两个\\
        System.out.println(arr4.length);

        for (int i = 0; i < arr4.length; i++) {
            System.out.println(arr4[i]);
        }


    }
}



Java字符串练习

题目要求

image-20230420100051591

代码实现

public class toArray {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        String res = fromArrayToString(arr);
        System.out.println(res);


    }

    public static String fromArrayToString(int[] arr) {
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1) {
                str += "world" + arr[i] + "#";
            } else {
                str += "world" + arr[i] + "]";
            }
        }


        return str;

    }


}

题目要求

image-20230420101040731

代码实现

import java.util.Scanner;

public class Count {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        int countUpper = 0;
        int countNumber = 0;
        int countLower = 0;
        int countOther = 0;
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] >= 'A' && chars[i] <= 'Z') {
                countUpper++;
            } else if (chars[i] >= 'a' && chars[i] <= 'z') {
                countLower++;
            } else if (chars[i] >= '0' && chars[i] <= '9') {
                countNumber++;
            } else {
                countOther++;
            }

        }
        System.out.println("大写字母:" + countUpper);
        System.out.println("小写字母:" + countLower);
        System.out.println("数字:" + countNumber);
        System.out.println("其他字符:" + countOther);


    }
}



posted @ 2023-04-17 19:21  harper886  阅读(107)  评论(0编辑  收藏  举报