常用API

1、String

字符串是不可变的

​ 字符串一旦创建是不可变的,对字符串的任何操作实际上都是创建一个新的字符串对象,然后将当前变量的引用地址替换为新对象的地址。

常见创建字符串方式

//1.直接赋值
String str = "hello";
//2.通过构造方法,空参
String str1 = new String();
//3.构造方法传入字符数组创建字符串
char[] chars = {'h','e','l','l','o'};
String str2 = new String(chas);
//4.字节数组传参
byte[] bytes = {104,101,108,108,111};
String str3 = new String(bytes);

字符串拼接

String talk = "你好,你是干什么的";
String result = talk.substring(3,5);//包左不包右
System.out.println(result);
你是

2、StringBuilder类

StringBuilder类输出的是属性而不是一个地址。

StringBuilder sb = new StringBuilder("abc");
/*sb.append(123);
System.out.println(sb);
结果为:abc123
*/
/*sb.reverse();
System.out.println(sb);
结果为:cba
*/
/*int len = sb.length();
System.out.println(len);
结果为:3
*/
String str = sb.toString();
System.out.println(str);
结果为:abc//转换为string对象可以使用该对象的方法

字符串的拼接没有变量参与,字符串的值都在字符串常量池中,值相同,他们就相等。如果有变量参与,新的字符串就是通过new创建的对象,存在堆中,他们的值相同,却不相等。

1767865061829

Stringjoiner类

​ 将数组按要求拼接成字符串的类。

int[] arr1 = {1,2,3};
//将整数数组转为字符串
String string = Arrays.toString(arr1);
StringJoiner sj = new StringJoiner("[",",","]");//三个参数分别代表“开始”,“间隔”,“结束”
sj.add(string);
System.out.println(string);

3、Math类

进行数学计算的工具类,方法一般都是静态的,可以通过类名调用。

1767937808708

4、System类

exit()方法,退出程序。

currentTimeMiles()方法,获取自1970年1月1号八点开始的时间戳。

arraycopy(数据源数组,起始索引,目标数组,目标索引,拷贝个数),获取数组拷贝。

5、Runtime类

Runtime runtime = Runtime.getRuntime();
runtime.totalMemory();//已占用的内存
runtime.freeMemory();//剩余可占用内存
runtime.maxMemory();//最大内存

6、Object类

重写toString()方法

public InterTest(String name) {
        super(name);
    }
    
    @Override
    public String toString() {
        return getName();
    }

如果toString方法不重写,默认返回的是对象的地址。

重写equals()方法

@Override
    public final boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass()!=o.getClass()) return false;
        InterImpl inter1 = (InterImpl) o;
        return Objects.equals(name, inter1.name);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(name);
    }

在实际应用中自定义规则校验是否存在重复对象。

clone()方法

  • 使用该方法需要先重写,然后再使用。
  • 实现类要继承Cloneable接口(没有抽象方法,标记性接口,表示一旦实现,当前类对象就可被克隆)。
//浅拷贝
import java.util.StringJoiner;
//实现类要实现Cloneable接口
public class User implements Cloneable{
    private int id;
    private String userName;
    private String password;
    private String path;
    private int[] data;
    public User() {//空参构造

    }

    public User(int id, String userName, String password, String path, int[] data) {//带参构造
        this.id = id;
        this.userName = userName;
        this.password = password;
        this.path = path;
        this.data = data;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public int[] getData() {
        return data;
    }

    public void setData(int[] data) {
        this.data = data;
    }
    //重写toString方法将用户信息作为字符串返回
    @Override
    public String toString() {
        return "id为" + id + ", 用户名;" + userName + ", 密码:" + password + ", 游戏图片;" + path + ", 进度;" +arrToString();
    }
    //arrToString方法,将游戏进度数组转为字符串
    public String arrToString() {
        StringJoiner sj = new StringJoiner(",", "[", "]");
        for (int i = 0; i < data.length; i++) {
            sj.add(data[i] + "");
        }
        return sj.toString();
    }
	//重写克隆方法,空参方法,重写用户对象才能调用
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
//测试类
public class cloneTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        int[] data = {1,2,3,4,5,6,7,8,9};
        User user = new User(1,"zhangsan","1234qwer","girl11",data);
        //将Object类强转用户类
        User user2 = (User)user.clone();
        System.out.println(user);
        System.out.println(user2);
    }
}
================这是一个分界线======================
//深拷贝
 @Override
    protected Object clone() throws CloneNotSupportedException {
        int[] data = this.data;
        //创建一个和对象同样长度的数组
        int[] newData = new int[data.length];
        //手动拷贝数组
        System.arraycopy(data, 0, newData, 0, data.length);
        //克隆的对象
        User u = (User) super.clone();
        //用拷贝后的数组覆盖原先的地址引用(浅拷贝)
        u.data = newData;
        return u;
    }

为什么是浅拷贝

​ 克隆时,基本数据类型克隆的是具体的值,引用对象克隆的是具体数据的引用,也就是地址。克隆前后实际指向的是同一个地址的数据。

误区

​ 字符串处理中,建立的新字符串不代表原数组的数据备份,只是为了在输出时输出的是具体内容,而非对象的地址。

1.重写Object的clone()方法。

2.让对象类实现Cloneable接口。

3.创建对象并调用clone()。

6、Objects工具类

equals()方法

​ 底层先做非空判断,再比较两个对象。

isNull方法

​ 空为true,非空为false。

7、正则表达式(Pattern)

变量名.matches(正则表达式)

public class RegexDemo01 {
    public static void main(String[] args) {
        String qq = "12341236547804256789";
        //表示第一位非零数字,后面是5-19位数字,范围在0-9之间
        boolean result = qq.matches("[1-9]\\d{5,19}");
        System.out.println(result);
    }
}

any-rule插件工具。

replaceAll()方法

​ 按制定规则替换字符串。

String s = "小诗诗anfiubaeiu123小丹丹sadushnfi156小惠惠";
//将除下划线的大小写字符和数字替换成vs
String result =s.replaceAll("[\\w&&[^_]]+","vs");
System.out.println(result);

split()方法

​ 按制定规则截取字符串。

String s = "小诗诗anfiubaeiu123小丹丹sadushnfi156小惠惠";
//按照除下划线的大小写字符和数字截取字符串,截取的结果成一个数组
String[] arr = s.split("[\\w&&[^_]]+");
for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

1.爬取

Pattern&Matcher

​ 按照规则获取指定的内容。

public class RegexDemo02 {
    public static void main(String[] args) {
        String str = "今天天气不错,适合学习java。java8是一门强大的语言,不管是java17还是java21,都很有趣。我的博客地址是: https://blog.java.net/artificial/4399 。";
        //1.建立一个爬取规则
        Pattern p = Pattern.compile("java\\d{0,2}");
        //2.一个依赖规则的爬取对象
        Matcher m = p.matcher(str);
        //循环查找符合条件内容,并输出
        while(m.find()) {
            String s = m.group();
            System.out.println(s);
        }
    }
}
posted @ 2026-01-10 21:19  coldmist  阅读(14)  评论(0)    收藏  举报