当前位置: 首页 > news >正文

Java——字符串(黑马个人听课笔记)

1、API

API(Application Programming Interface):应用程序编辑接口

简单理解:API就是别人已经写好的东西,我们不需要自己编写,直接使用即可。

Java API:指的就是JDK中提供的各种功能的Java类

这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

API帮助文档:帮助开发人员更好的使用API和查询API的一个工具

2、字符串

有字符串参与的“+”都是拼接操作,产生一个新的字符串

String概述

java.lang.String类代表字符串,Java程序中的所有字符串文字(例如'abc")都为此类的对象。

String的注意点

字符串的内容是不会发生改变的,它的对象在创建后不能被更改。

下面的这种情况并不是改变了原来字符串的内容,而是创建了一个新的字符串,把新的字符串再赋值给前面的变量name

总结

3.创建String对象的两种方式

  1. 直接赋值
  2. new 构造方法

例: 

public class StringDemo1 {

    public static void main(String[] args) {
        //1.使用直接赋值的方式获取一个字符串对象
        String s1 ="abc";
        System.out.println(s1);

        //2.使用new的方式来获取一个字符串对象
        //空参构造:可以获取一个空白的字符串对象
        String s2 =new String();
        System.out.println("@"+s2+"!");

        //传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象
        String s3 = new String("abc");
        System.out.println(s3);

        //传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
        //需求:我要修改字符串的内容:abc-->Qbc
        //abc --> {'a','b','c'} --> {'Q','b','c'} --> "Qbc"
        char[] chs ={'a','b','c','d'};
        String s4 = new String(chs);
        System.out.println(s4);

        //传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
        //应用场景:以后在网络当中传输的数据其实都是字节信息
        //我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了
        byte[] bytes={97,98,99,100};
        String s5 = new String(bytes);
        System.out.println(s5);
    }
}

内存

StringTable(串池):字符串常量池,用于存储字符串,只有直接赋值的字符串才存储在串池中,new关键字的不在此处

每new一次,创建一个新的空间,相同的字符串较多时,会浪费内存空间

4.Java的常用方法(比较)

字符串比较

  • boolean equals方法(要比较的字符串)                完全一样结果才是true,否则为false
  • boolean equalslgnoreCase(要比较的字符串)     忽略大小写的比较

例1:

public class StringDemo2 {
    public static void main(String[] args) {
        //1.创建两个字符串对象
        String s1 = new String("abc");
        String s2 = "Abc";

        //2.==号比较
        //基本数据类型:比的是数据值
        //引用数据类型:比的是地址值
        System.out.println(s1 == s2);

        //3.比较字符串对象中的内容是否相等
        boolean result1 = s1.equals(s2);
        System.out.println(result1);

        //4.比较字符串对象的内容是否相等,忽略大小写
        //忽略大小写只能是英文状态下的
        boolean result2 = s1.equalsIgnoreCase(s2);
        System.out.println(result2);




    }
}

例2:

import java.util.Scanner;

public class StringDemo3 {
    public static void main(String[] args) {
        //1.假设我现在键盘录入一个abc
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a string: ");
        String str1 = sc.next();//abc  是new出来的
        //2.代码中再定义一个字符串abc
         String str2 ="abc";
        //3.用==比较,这两者能一样吗?
        System.out.println(str1==str2);
        
        //结论:
        //以后只要想比较字符串的内容,就必须要用String里面的方法
    }
}

5.StringBuilder

StringBuilder概述

StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的

  • 作用:提高字符串的操作效率

StringBuilder构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

StringBuilder常用方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()反转容器中的内容
public int length()返回长度(字符出现的个数)
public String toString()通过toString()就可以实现把StringBuilder转换为String

例1:

public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder();
        //打印
        //普及:
        //因为StringBuilder是Java已经写好的类
        //打印对象不是地址值而是属性值
        System.out.println(sb);//打印结果为空
    }
}
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");
        //打印
        //普及:
        //因为StringBuilder是Java已经写好的类
        //打印对象不是地址值而是属性值
        System.out.println(sb);//abc
    }
}
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");

        //2.添加元素
        sb.append(1);
        sb.append(2.3);
        sb.append(true);
        
        //打印
        //普及:
        //因为StringBuilder是Java已经写好的类
        //打印对象不是地址值而是属性值
        System.out.println(sb);//abc12.3true
    }
}
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");
           
        //反转
        sb.reverse();

        //打印
        //普及:
        //因为StringBuilder是Java已经写好的类
        //打印对象不是地址值而是属性值
        System.out.println(sb);//cba
    }
}
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");

        //获取长度
        int len = sb.length();
        System.out.println(len);//3

        //打印
        //普及:
        //因为StringBuilder是Java已经写好的类
        //打印对象不是地址值而是属性值
        System.out.println(sb);
    }
}
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");

        //2.添加字符串
        sb.append("aaa");
        sb.append("bbb");
        sb.append("ccc");
        sb.append("ddd");

        System.out.println(sb);//aaabbbcccddd

        //3.再把StringBuilder变回字符串
        String str = sb.toString();
        System.out.println(str);//aaabbbcccddd
    }
}

链式编程:当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法

例2:

import java.util.Scanner;

public class StringBuilderDemo4 {
    public static void main(String[] args) {
        //链式编程:
        //当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法
        int len =getString().substring(1).replace("A","Q").length();
        System.out.println(len);//2

    }

    public static String getString(){
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a string: ");
        String str = sc.nextLine();//abc
        return str;
    }
}
public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");

        //2.添加字符串
        sb.append("aaa").append("bbb").append("ccc").append("ddd");


        System.out.println(sb);//aaabbbcccddd

        //3.再把StringBuilder变回字符串
        String str = sb.toString();
        System.out.println(str);//aaabbbcccddd
    }
}

练习(对称字符串)

import java.util.Scanner;

public class StringBuilderDemo6 {
    //使用StringBuilder的场景:
    //1.字符串的拼接
    //2.字符串的反转

    public static void main(String[] args) {
        //1.键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        
        //2.反转键盘录入的字符串
        String result = new StringBuilder().append(str).reverse().toString();
        
        //3.比较
        if(str.equals(result)){
            System.out.println("当前字符串是对称字符串");
        }else{
            System.out.println("当前字符串不是对称字符串");
        }
    }
}

练习(拼接字符串)

public class StringBuilderDemo7 {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr ={1,2,3};
        //2.调用方法把数组变成字符串
        String str = arrToString(arr);
        System.out.println(str);//[1,2,3]
    }

    public static String arrToString(int[] arr) {
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            }else{
                sb.append(arr[i]).append(",");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

6.StringJoiner

StringJoiner概述

  • StringJoiner跟StingBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。
  • 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用
  • JDK8出现的

StringJoiner的构造方法

方法名说明
public StringJoiner(间隔符号)创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号)创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号

StringJoiner的成员方法

方法名说明
public StringJoiner add(添加的内容)添加数据,并返回对象本身
public int length()返回长度(字符出现的个数)
public String toString()返回一个字符串(该字符串就是拼接之后的结果)

例:

import java.util.StringJoiner;

public class StringJoinerDemo1 {
    public static void main(String[] args) {
        //1.创建一个对象,并指定中间的间隔符号
        StringJoiner sj = new StringJoiner("---");

        //2.添加元素
        sj.add("aaa").add("bbb").add("ccc");

        //3.打印结果
        System.out.println(sj);//aaa---bbb---ccc

    }
}
import java.util.StringJoiner;

public class StringJoinerDemo2 {
    public static void main(String[] args) {
        //1.创建对象
        StringJoiner sj = new StringJoiner(", ","[","]");

        //2.添加元素
        sj.add("aaa").add("bbb").add("ccc");

        int len = sj.length();
        System.out.println(len);//15

        //3.打印结果
        System.out.println(sj);//[aaa, bbb, ccc]
        String str=sj.toString();
        System.out.println(str);//[aaa, bbb, ccc]
    }
}

总结

7.字符串原理

7.1 字符串存储的内存原理

  • 直接赋值会复用字符串常量池中的
  • new出来不会复用,而是开辟一个新的空间

7.2  ==号比较的到底时什么?

  • 基本数据类型比较数据值
  • 引用数据类型比较地址值

http://www.dtcms.com/a/122539.html

相关文章:

  • flutter开发音乐APP(前提准备)
  • 计算机网络笔记-分组交换网中的时延
  • 【挑战项目】 --- 微服务编程测评系统(在线OJ系统)(一)
  • MongoDB 的详细介绍
  • 网络基础2
  • 【含文档+PPT+源码】基于python爬虫的豆瓣电影、音乐、图书数据分析系统
  • Vue 基础语法介绍
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day9
  • 探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发
  • Could not resolve com.google.guava:guava:32.1.1-jre.
  • 【设计模式】面向对象开发学习OOPC
  • vue、vue2、vue3
  • mamba学习1
  • 蓝桥杯填空题攻克
  • 【C++】二叉搜索树(二叉查找树、二叉排序树)详解
  • Go 微服务框架 | 路由实现
  • 【BFT帝国】20250409更新PBFT总结
  • idea手动创建resources文件夹
  • checkra1n越狱出现的USB error -10问题解决
  • 面向数据库场景的大模型交互微调数据集
  • Flutter命令行打包打不出ipa报错
  • IDEA 2024 Maven 设置为全局本地仓库,避免新建项目重新配置maven
  • MySQL MVCC 机制详解
  • 大数据 - 1. 概述
  • 第一章初识爬虫
  • 【力扣hot100题】(079)划分字母区间
  • vue3.2 +vxetable4.6 渲染大数据列,出现错乱问题处理方案
  • BabelDOC ,开源的 AI PDF 翻译工具
  • 20250409-大数据-python数据处理平台/接口平台(DFF)
  • 基于cartographer 1.0.0 不使用ros 使用激光雷达数据和IMU数据融合实现的建图