Java-_- API,基础常用类

目录

1、Java API

2、常用类 

1、Object类

1、toString

2、equals方法

 2、Arrays类

1、基本类型数组

1、equals

2、copyOf

3、fill

4、toString

5、sort

6、binarySearch

2、引用类型数组

1、toString

2、sort

3、BaseType基本数据类型包装类

1、Integer

1、基本方法

 2、构造方法

 3、静态方法

 4、非静态方法

 5、装箱

6、拆箱

 4、String类

1、创建对象

2、String类中的构造方法

3、判断功能

4、获取功能

5、转换功能

6、替换功能

5、StringBuffer类

1、特点

2、创建对象

3、添加功能

4、删除功能

5、替换功能

6、反转功能

7、截取功能

6、StringBuilder类

7、String类与StringBuffer类与StringBuilder类区别 

8、正则表达式 

1、概念

2、特殊字符

3、案例

 9、Math类

10、Random类

11、时间类

1、Date类

1、构造方法

2、创建对象

3、方法调用 

2、Calender类(日历)

1、获取一个实例

 2、方法调用

3、创建一个日期

3、SimpleDateFormat类(日期格式化)

1、将字符串日期转为Date对象

2、将一个日期对象转为字符串日期

 12、BigInteger类

13、BigDecimal类


1、Java API

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

是对Java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明。

2、常用类 

1、Object类

Object:是Java体系结构中最顶层的类
       可以表示Java中任意的类
1、toString
输出一个对象,但是对象是在内存中存储,不能输出的。
当输出一个对象时,会默认调用此对象的toString()

如果类中没有定义toString( ),会源用Object类中的toString( )。

Obejct类中toString(),是把对象在内存的哈希值(以16进制)返回。如下

那么如何把信息以字符串的形式输出?

我们可以在类中对定义Object类中的toString()进行重写,后面调用时,就调用我们自己类中的toString()了

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());

//在类中重写toString方法
public class Person1 extends Object{
    private String name;
    private int age;

    public Person1(){

    }
    public Person1(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ",age=" + age + '}';
    }
}


public class TestPerson {
    public static void main(String[] args) {
        new Person1().hashCode();
        new int[10].hashCode();
        Person1 p1 = new Person1("张三", 16);
       
        System.out.println(p1);//结果:person{name='张三',age=16}
    }
}
2、equals方法

Object类中的equals:判断两个对象是否相等

他默认比较的是两个对象的地址是否相等,在比较地址时我们就可以使用==代替它。

这里说明一下==的用法:
==:比较等号两边是否相等
当==用于比较基本类型时,比较的是常量值是否相等
当==用于比较引用类型时,比较的是对象的地址是否相等

所以在其他类中,一般都重写了equals(),把它改造为比较对象中的内容是否相等。

即在其他类中,重写equals(),比较的是对象中的内容。

public boolean equals(Object obj) {

        return (this == obj);

}

public class Person {
    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object a) {
        if(a instanceof Person){//父类类型中持有的实际类型是否是指定的类型
            Person other=(Person)a;
            return name.equals(other.name)&&age==other.age;
        }
        return false;
    }
}

public class TestPerson {
    public static void main(String[] args) {
        int a=10;
        int b=10;
        System.out.println(a==b);//true

        Person p1=new Person("张三",12);
        Person p2=new Person("张三",12);
        System.out.println(p1.equals(p2));//没重写equals之前是false,重写之后是true
       
    }
}

 2、Arrays类

java.util.Arrays类用于操作数组工具类,里面定义了常见操作数组的静态方法。

1、基本类型数组
1、equals

比较两个数组的内容是否相等

public class A_equals {
    public static void main(String[] args) {
        /*
          比较两个数组的内容是否相等。
         */
        int[] a={1,2,3,4};
        int[] b={1,2,3,4};
        System.out.println(Arrays.equals(a,b));
    }
}
2、copyOf

数组扩容。讲原数组的内容,复制到一个指定长度的新数组中。

import java.util.Arrays;

/*
copyOf 数组扩容
       将原数组内容,复制到一个指定长度的新数组中
 */
public class B_copyOf {
    public static void main(String[] args) {
        int[] c=new int[5];
        c[0]=1;
        c[1]=2;
        c[2]=3;
        c[3]=4;
        c[4]=5;
        System.out.println(Arrays.copyOf(c,10));

    }

}
3、fill

用指定的值,将指定的数组中的每个元素填充。

import java.util.Arrays;

/*
fill()  用指定的值,将指定数组中的每个元素填充
 */
public class C_fill {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4};
        int[] b = {1, 2, 3, 4};
        Arrays.fill(a, 0);//将数组中的值指定为0
        System.out.println(Arrays.toString(a));
    }
}
4、toString

将数组中的元素内容拼接为一个字符串输出

import java.util.Arrays;

/*
toString 将数组中的元素内容拼接为一个字符串输出
 */
public class D_toString {
    public static void main(String[] args) {
        int[] a={1,2,3,4};
        int[] b={1,2,3,4};
        System.out.println(Arrays.toString(a));
    }
}
5、sort

对指定的数组进行升序排序

1、Arrays.sort(a);//从0—length-1升序排序
2、Arrays.sort(a,0,3);开始排序的位置0,结束排序的位置3(不包含3)
import java.util.Arrays;
/*
    sort():对指定的数组进行升序排序
 */
public class E_Sort_BinarySearch {
    public static void main(String[] args) {
        long[] a = {3, 5, 6, 2, 1, 9};
        Arrays.sort(a);//0-length-1
        System.out.println(Arrays.toString(a));//[1, 2, 3, 5, 6, 9] 
    }
}
import java.util.Arrays;

public class E_Sort_BinarySearch {
    public static void main(String[] args) {
        long[] a = {3, 5, 6, 2, 1, 9};
       
        //Arrays.sort(a,0,3);索引:开始排序的位置0,结束排序的位置3(不包含3)
        Arrays.sort(a,0,4);
        System.out.println(Arrays.toString(a));//[2, 3, 5, 6, 1, 9]
   }
}
6、binarySearch

二分搜索算法查找指定的元素位置,如果未找到返回负数,二分查找前提是数组必须有序。

1、Arrays.binarySearch(b,3);//查找数组b,是否有3,返回其下标
2、Arrays.binarySearch(b,0,4,2);//开始查找的位置索引0,结束查找的位置索引4,找对象2,返回下标。
import java.util.Arrays;

public class E_Sort_BinarySearch {
    public static void main(String[] args) {
        int[] b={2,3,4,9,5};
        Arrays.sort(b);
        int index=Arrays.binarySearch(b,3);
        System.out.println(index);//返回下标

        //开始查找的位置索引0,结束查找的位置索引4,找对象2
        int index2=Arrays.binarySearch(b,0,4,2);
        System.out.println(index2);
    }
}
2、引用类型数组
1、toString
2、sort
在对类排序时,要实现Comparable接口,指定一个排序的方法。
import java.util.Arrays;

public class TestStudent {
    public static void main(String[] args) {
        //创建对象
        Student s1=new Student("张1",12);
        Student s2=new Student("张2",13);
        Student s3=new Student("张3",16);
        Student s4=new Student("张4",11);

        //定义一个Student类型的数组
        Student[] students=new Student[4];
        //将创建的对象存入数组中
        students[0]=s2;
        students[1]=s4;
        students[2]=s1;
        students[3]=s3;

        //对其进行排序
        //一个类进行排序,那么这个类必须实现Comparable接口,指定一个排序的方法
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    }


}
//类实现Comparable接口
public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //方法重写
     @Override
    public String toString() {
        return "Student{"+
                "name='"+name+'\''+
                ",age="+age+'}';
    }
    /*
    重写: compareTo( )用来指定排序规则,
         可以执行用类中的哪个属性作为排序的项
         这个方法在sort()方法的底层调用,来判断大小,不需要用对象调用,sort会自动调用它。
   */
    @Override
    public int compareTo(Student o){
        //return this.age-o.age;
        return o.name.compareTo(this.name);
    }

}

3、BaseType基本数据类型包装类

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进表示,这样八个和基本数据类型对应的类统称为包装类。

包装类(如:Integer,Double等)这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。

基本数据类型包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

对于包装类来说,这些类的用途主要包含两种:

  • 作为和基本数据类型对应的类类型存在。
  • 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

以java.lang.Integer类为例,

1、Integer
1、基本方法
  1. 最大int型数值
  2. 最小int型数值
  3. int类型字节大小
public class IntegerDemo {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);//最大值2147483647
        System.out.println(Integer.MIN_VALUE);//最小值-2147483648
        System.out.println(Integer.SIZE);//32
        System.out.println(Integer.BYTES);//4
   }
}
 2、构造方法

构造方法:

  • 构造Integer对象,里面包装了一个基本类型的值(字符串),用该对象来表示一个int值 
  • Integer a = new Integer(8);
    (可以是字符串类型的int值)
    Integer b = new Integer("4");
public class IntegerDemo {
    public static void main(String[] args) {
       
        //构造Integer对象,里面包装了一个基本类型的值,用该对象表示一个int值
        Integer a = new Integer(8);
        Integer b = new Integer("4");

        System.out.println(a);
        System.out.println(b);
 3、静态方法

 静态方法

  • 拿Integer包装类型直接使用
  • Integer.toHexString(17)//将17转为16进制
    Integer.toOctalString(22)//将22转为8进制
    Integer.toBinaryString(23)//将23转为二进制
  • Integer.max(a, b)//比较大小,返回较大的数的值
    Integer.compare(a, b)//比较大小,如果a>b,返回1;a<b,返回-1;a=b,返回0;
public class IntegerDemo {
    public static void main(String[] args) {
        //构造Integer对象,里面包装了一个基本类型的值,用该对象表示一个int值
        Integer a = new Integer(8);
        Integer b = new Integer("4");

        System.out.println(a);
        System.out.println(b);

        //一类是静态方法:(拿Integer包装类型直接)
        System.out.println(Integer.toHexString(17));
        System.out.println(Integer.toOctalString(22));
        System.out.println(Integer.toBinaryString(23));
        System.out.println(Integer.max(a, b));
        System.out.println(Integer.compare(a, b));//1,0,-1
    }
}
 4、非静态方法

非静态方法

  • 用new关键字创建出来的对象,实例化。
  • a.equals(b)//判断a和b的内容是否相等
    b.compareTo(a)//比较大小,b>a,返回1;b<a,返回-1;b=a,返回0;
public class IntegerDemo {
    public static void main(String[] args) {

        //构造Integer对象,里面包装了一个基本类型的值,用该对象表示一个int值
        Integer a = new Integer(8);
        Integer b = new Integer("4");

        //二类是非静态方法(拿new出来的对象来实例化)
        System.out.println(a.equals(b));//是否相等 false
        System.out.println(b.compareTo(a));//比较大小,小:-1,大:1,相等:0
   }
}
 5、装箱

将基本类型转换成包装类型---->装箱

自动装箱:把基本数据类型自动转为引用类型时,装箱的时候会自动调用valueOf( )方法。那把这称之为自动装箱。

如果基本类型的值在(-128~127)之间,java会首先从缓存数组中直接抽取一个Inteder对象,不会创建新对象,这样就减少了对象的创建次数。

如果两个值相同,那么我们说获取的是同一个数。

如果不在(-128~127)范围之间,那么就比较麻烦了,每次都会创建一个新的Inteder对象返回。

我们来看看java底层对于valuOf方法的使用:
 public static Integer valueOf(int i) {
           if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
               return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
            return new Integer(i);
}
public class IntegerDemo {
    public static void main(String[] args) {
        
        int e=10;//如过换成是140
        ///Integer x=Integer.valueOf(e);
        Integer x=e;//自动装箱,会默认自动调用ValueOf()方法。
        Integer z=e;
     
        System.out.println(x==z);//比较的是两个数的地址。返回的是true
        //如果e不在基本类型范围-128~127,Java会创建一个Integer对象。用==比较的时候自然返回的是false
        System.out.println(x.equals(e));//比较的是两个数的内容。

    }
}
6、拆箱

将引用(包装)类型转为基本类型方法---->拆箱

自动拆箱:将引用类型转为基本类型时,会自动调用intValue方法,被称之为自动拆箱。

引用类型转基本类型转换的方法: 拆箱
     //int c=a.intValue();//使用intValue()方法来拆箱
     Integer a = new Integer(8);
     int y=a;//就是自动拆箱,会默认自动调用intValue方法,

 4、String类

String类在java中,路径:"java.lang.String",是由多个字符组成的一串数据(字符序列)的字符串常量。

java中所有字符串都是此类的实例。

String类中有许多方法,我在这里对其进行分类记忆。

1、创建对象
  • 1、String s="abc";

先在栈中创建一个String类的对象引用变量s,创建时,先去字符串常量池中查找有没有相同的对象。如果有,说明字符串常量池中已经存储,就使用字符串常量池的对象,不需要创建新的,直接返回已存在的对象的地址。(字符串常量池在java中是一个独立的内存管理空间

如果没有,就创建一个的字符串对象,并返回其地址。

  • 2、String s=new String("abc");

使用new关键字,每次都创建一个新的对象,值存储在堆内存的对象中。

public class String1 {
    public static void main(String[] args) {
        String s = "ddd";
  
        String s1 = "ddd";
        System.out.println(s == s1);//在字符串常量池中,所以地址相同,true

        String a = new String("ddd");
        String b = new String("ddd");
        System.out.println(a == b);//重新创建的对象,false
        System.out.println(a.equals(b));//true
        System.out.println(s1 == a);//false
        System.out.println(s1.equals(a));//true

    }
}

注意创建一个新的字符串对象后,字符串就不变了,它们的值在创建后不能被更改。如果更改他们的值,相当于重新创建了一个新的对象。

public class String2 {
    public static void main(String[] args) {
        //字符串不变,它们的值在创建后不能被更改
        String s="abc";//对象1:abc
               s+="ef";//对象2:abcef
               s+="ggg";//对象3:abcefggg
        System.out.println(s);//进行运算时,创建了三个对象。abcefggg
    }
}
2、String类中的构造方法
String() //无参的构造方法
String(String b)  //有参的构造方法
String(byte[] bytes)  把字节数组-转为-字符串   s3.getBytes();
String(char[] chars)  把char数组-转为-字符串   s5.toCharArray();
public class String3 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //1、无参
        String s1 = new String();
        //2、有参
        String s2 = new String("acb");
        //3、字节数组---与---字符串
        String s3 = "你好";
        byte[] bytes = s3.getBytes();//编码:把字符串"你好"转为:字节数组(一串数字)
        System.out.println(Arrays.toString(bytes));//输出:[-28, -67, -96, -27, -91, -67]

        String s4=new String(bytes);//解码:把字节数组转为:字符串"你好"
        System.out.println(s4);//输出:你好

        //4、char数组---与--字符串
        String s5="cba";
        char[] chars=s5.toCharArray();//把字符串转为字符数组
        Arrays.sort(chars);//以数组的形式进行排序

        String s6=new String(chars);//把排序好的数组转为字符串
        System.out.println(s6);//输出:abc

    }
}
3、判断功能
boolean equals ( Object anObject ) --------> 比较字符串对象中的内容是否相等。
boolean equalsIgnoreCase ( String anotherString ) ---------> 比较字符串对象中的内容是否相等(忽略大小写)。
boolean contains ( CharSequence s ) ----------> 判断字符串中是否包含指定的字符串(连续的或单独的)。
boolean isEmpty () --------> 判断字符串是否为空串。
boolean startsWith ( String prefix ) ---------> 判断是否以指定的字符串开头。
boolean endsWith ( String suffix ) ----------> 判断是否以指定的字符串结尾。
public class String4 {
    public static void main(String[] args) {
        String s1=new String("abcd");
        String s2=new String("abcD");

        System.out.println(s1.equals(s2));//false比较字符串对象中内容是否相等
        System.out.println(s1.equalsIgnoreCase(s2));//true比较字符串对象中的内容是否相等(忽略大小写)
        System.out.println(s1.contains("bc"));//true判断字符串中是否包含指定的字串 (连续的或单独的)
        System.out.println(s1.isEmpty());//false判断字符串是否为空串
        System.out.println(s1.startsWith("ac"));//false判断是否以指定的字符串开头
        System.out.println(s1.endsWith("cd"));//true判断是否以指定的字符串结尾

    }
}
4、获取功能
int length () --------> 获取字符串的长度。
char charAt ( int index ) --------> 获取字符串指定位置上的字符。
int indexOf ( String str ) --------> 返回指定字符串首次出现的位置。
int indexOf ( String str , int fromIndex ) --------> 返回指定字符串首此出现的位置,从指定位置开始查找。
int lastIndexOf ( String str ) --------> 从后向前查找,返回指定字符串首次出现的位置。
String substring ( int beginIndex ) ---------> 从指定位置截取一个字符串的副本到结束。
String substring ( int beginIndex , int endIndex ) --------> 从指定位置开始截取一个字符串的副本到指定位置(不包含结束位置)。
public class String5 {
    public static void main(String[] args) {
        String s1 = new String("abcdefcefg");
                        //下标:0123456789
        System.out.println(s1.charAt(4));//结果:e,获取字符串指定位置上的字符
        System.out.println(s1.indexOf("ef"));//结果:4,返回字符串首次出现的位置
        System.out.println(s1.indexOf("c",4));//结果:6,从指定位置查找,返回字符串首次出现的位置
        System.out.println(s1.lastIndexOf("d"));//结果:3,从后向前查找,返回字符串首次出现的位置
        System.out.println(s1.substring(4));//结果:efcefg,从指定位置开始截取一个字符串的副本到完
        System.out.println(s1.substring(4,7));//结果:fc,从指定位置开始截取一个字符串的副本到指定的位置结束(不包含指定位置)
        s1.length();//获取字符串的长度
    }
}
5、转换功能
byte [ ] getBytes () -------> 把字符串转为字节数组。
char [ ] toCharArray () -------> 把字符串转为字符数组。
static String valueOf ( int i ) --------> 将传入的参数转为字符串类型。
static String valueOf ( char data [ ]) -------> 将传入的字符数组转为字符串类型。
char charAt ( int index ) -------> 将返回传入的参数(作为字符串下标的)字符
String toLowerCase () --------> 将英文字母转为小写
String toUpperCase () --------> 将英文字母转为大写。
String concat ( String str ) ---------> 拼接指定的字符串内容到原来的字符串末尾,返回一个新的字符串的对象。
String [] split ( String regex ) (分割符) --------> 将一个字符串用指定的分隔符,拆成一个个的字符串存入字符串数组中
public class String6 {
    public static void main(String[] args) {
        String s1=new String("abcddfgs");
        System.out.println(Arrays.toString(s1.getBytes()));//结果:[97, 98, 99, 100, 100, 102, 103, 115],将字符串转为字节数组
        System.out.println(Arrays.toString(s1.toCharArray()));//结果:[a, b, c, d, d, f, g, s],将字符串转为字符数组

        String s2=String.valueOf(1234);
        System.out.println(s2);//结果:1234,将传入的参数转为字符串类型
        System.out.println(s2.charAt(3));//结果:4,将返回传入的参数作为下标的字符

        String s3=String.valueOf("abc2".toCharArray());
        System.out.println(s3);//结果:abc2,将传入的字符串用toCharArray转为字符数组,然后将字符数组转为字符串类型

        String s4="abcEDF";
        System.out.println(s4.toLowerCase());//结果:abcedf,将字符串中的英文字母全部改成小写
        System.out.println(s4.toUpperCase());//结果:ABCEDF,将字符串中的英文字母全部改成大写

        String s5="a3;b2;c4";
        System.out.println(s5.concat(";"));//结果a3;b2;c4;,拼接指定的字符串内容到原来的字符串末尾,返回一个新的字符串

        String[] strings=s5.split(";");//分隔符,将字符串用指定的分隔符,拆分成一个个字符串存入一个新的字符串数组中并返回
        System.out.println(Arrays.toString(strings));//结果:[a3, b2, c4]
    }

}
6、替换功能
String replace ( char oldChar , char newChar ) ------> 将内容替换字符串中指定的字符数组。
String replace ( CharSequence target , CharSequence replacement ) -------> 将新内容替换字符串中指定的字符串。
String replaceAll ( String regex , String replacement ) --------> 用新内容替换字符串中正则表达式匹配的字符串。
String replaceFirst ( String regex , String replacement ) --------> 用新内容替换字符串中正则表达式匹配的字符串,只能替换第一个。
String trim () -------> 去除字符串两端的空格 .
public class String7 {
    public static void main(String[] args) {
        String s1=new String(" a4b3c5ed4 ");

        System.out.println(s1.replace('a','b'));//结果:b4b3c5ed4 ,用新内容替换字符串中指定的字符串
        System.out.println(s1.replace("3","4"));//结果:a4b4c5ed4

        System.out.println(s1.replaceAll("4","1"));//结果:a1b3c5ed1 ,用新内容替换字符串中正则表达式匹配的字符串
        System.out.println(s1.replaceAll("\\d","t"));//结果:atbtctedt ,用新内容替换字符串中正则表达式匹配的字符串(所有数字)。
        System.out.println(s1.replaceFirst("4","0"));//结果:a0b3c5ed4 ,用新内容替换字符串中正则表达式匹配的字符串,只能替换第一个
        System.out.println(s1.replaceFirst("\\d","c"));//结果:acb3c5ed4 ,用新内容替换字符串中正则表达式匹配的字符串(\d指数字),只能替换第一个

        System.out.println(s1.length());//11,获取字符串的长度
        System.out.println(s1.trim().length());//结果:9,去除字符串两端的空格

    }
}

5、StringBuffer类

String声明的字符串对象值一旦给定就不能被改变了。那我们在每次拼接的时候都会创建新的字符串对象,既耗时又占用空间。这里Java就创建了一个新的类:StringBuffer。线程安全的可变字符序列‘

1、特点

StringBuffer是内容可以改变的字符串。底层实现是:char[] value; 并且没有使用final修饰,每次添加内容都是对此数组进行操作,不会创建新的字符串对象

2、创建对象

构造方法

public StringBuffer( ) //空参

public StringBuffer(String str) //有参

//空参的构造方法中默认指定:底层数组的长度是16
StringBuffer s = new StringBuffer();
//当然我们也可以指定数组的容量
StringBuffer s2 = new StringBuffer(10);

//有参的构造方法中默认数组长度:内容长度+16
StringBuffer s=new StringBuffer("abcdefg");
public class StringBuffer1 {
    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer();//空参的构造方法 指定底层数组的长度是16
        StringBuffer s=new StringBuffer("abcdefg");//创建 内容长度+16的char数组
        StringBuffer s2 = new StringBuffer(10);//指定数组的容量
        
        System.out.println(s);
    }
}
3、添加功能

public StringBuffer append(String str)//在原字符串后添加字符串

public StringBuffer insert(int offset,String str)//向指定位置上插入指定的字符串

4、删除功能

public StringBuffer deleteCharAt(int index)//删除指定位置上的字符

public StringBuffer delete(int start,int end)//删除指定区间上的字符,包含开始位置,不包含结束位置

5、替换功能

public StringBuffer replace(int start,int end,String str)//替换指定区间上的字符串,包含开始位置,不包含结束位置。

6、反转功能

public StringBuffer reverse()//反转字符

7、截取功能

public String substring(int start)//从当前位置截取字符

public String substring(int start,int end)//从当前位置截取字符串,包含开始,不包含结尾。

注意:截取字符串时,从StringBuffer中截取一个字符串副本,返回一个新的String类型对象,StringBuffer本身的对象不变。

public class StringBuffer1 {
    public static void main(String[] args) {
        //创建对象
        StringBuffer s1 = new StringBuffer();//空参的构造方法16 指定底层数组的长度是16
        StringBuffer s=new StringBuffer("abcdefg");//创建 内容长度+16的char数
组
        System.out.println(s);
        StringBuffer s2 = new StringBuffer(10);//指定数组的容量

        //添加元素
        s1.append("efd");
        System.out.println(s1);

        s2.append("erty");
        s2.append("uuuu");
        System.out.println(s2);


        System.out.println(s2.insert(1,"g"));//向指定位置上插入指定的字符串
        System.out.println(s2.delete(0,3));//删除指定区间上的字符,包含开始位置,不包含结尾
        System.out.println(s2.deleteCharAt(1));//删除指定位置上的字符
        System.out.println(s2.replace(0,2,"AAA"));//替换指定区间字符串
        System.out.println(s2.reverse());//反转字符

        System.out.println(s2.substring(0,4));//截取字符串,从StringBuffer中截取一个字符串副本,返回给一个新的String对象,StringBuffer对象不变

    }

}

 

6、StringBuilder类

StringBuilder类功能和StringBuffer功能完全一致,但是区别是:StringBuffer是线程安全的。

7、String类与StringBuffer类与StringBuilder类区别 

String: 是字符常量,适用于少量的字符串操作的情况。是一个值不可以改变的字符串
StringBuffer: 值可以改变且不需要创建对象,方法上都加了锁,是在多线程(任务)执行时线程是安全的
StringBuilder: 值可以改变且不需要创建对象,由于方法上没有加锁,在多线程(任务)执行时线程是不安全的,适合单线程

8、正则表达式 

1、概念
正则表达式:Regular Expression 简称:regex。是一种规格(模式)匹配语法,是用于文本处理,他允许用户创建一个模式,用于在字符串中匹配特定的文本或字符序列。
可以使一些正则表达式中定义的特殊符号来定义一种规则,然后用此规则去匹配某个字符串。

他是个boolean类型,如果字符串与规则相匹配返回true,否则返回false
2、特殊字符
字符含义
*允许重复0次或更多次
+允许重复1次或更多次
允许重复0次或1次
{n}允许重复出现n次
{n,}允许至少重复出现n次
{n,m}允许重复至少n次不大于m次
\d匹配数字
\D匹配任意非数字的字符
[0-9]字符串中只有0-9的数字,且默认只允许出现一次
[a-z]小写字母,且默认只允许出现一次
[A-z]任意字母,且默认只允许出现一次
[357]只允许出现3或5或7,且默认只允许出现一次
[0-9A-z]匹配数字或字母或下划线
\w匹配数字或字母或下划线
\W匹配非数字或非字母或非下划线
\s匹配空格字符
\S匹配非空格字符
|逻辑或
.匹配除换行符以外的任意字符
3、案例

验证一个字符串是否是大陆地区的手机号格式?(利用正则表达式去定义一种规则)

matches()方法---->里面写一个规则,进行匹配,判断字符串是否符合要求。
public class Regex1 {
    //验证一个字符串是否是中国大陆地区手机号?
    public static void main(String[] args) {
        String s = "17789876754";
        System.out.println(s.matches("1[35789]\\d{9}"));//true

        //验证一个字符串是否是邮箱?
        String s1="3485083973@qq.com";
        System.out.println(s1.matches("\\w{6,10}@[0-9a-z]{2,5}\\.com|com\\.cn"));//true
        
        //验证一个字符串是否是中文字符?
        String s2="中国";
        System.out.println(s2.matches("[\u4e00-\u9fa5]+"));//true

    }
}

 9、Math类

Math.PI;//Π
Math.max(int a, int b);//求两数最大值
Math.abs(int a);//求绝对值
Math.sqrt(double a);//求平方根
Math.floor(double a);//向下取整
Math.ceil(double a);//向上取整
Math.round(double a);//正常取整,四舍五入
Math.random();//求随机数(大于0,小于1)
public class Dame {
    public static void main(String[] args) {
        System.out.println(Math.PI);
        System.out.println(Math.max(12,23));
        System.out.println(Math.abs(-3));//int 绝对值
        System.out.println(Math.sqrt(9));//double 平方根
        System.out.println(Math.floor(9.1));//向下取整
        System.out.println(Math.ceil(9.1));//向上取整
        System.out.println(Math.round(9.5));//正常取整。四舍五入
        System.out.println(Math.random());//double 小于1,大于0,随机数
    }
}

 

10、Random类

nextBoolean();//随机返回Boolean值
nextDouble();//随机返回double值
nextInt();//随机返回int值
nextFloat();//随机返回float值
nextInt(int bound);//随机返回指定区间值

import java.util.Arrays;
import java.util.Random;

public class Reandom1 {
    public static void main(String[] args) {
        Random random=new Random();
        System.out.println(random.nextBoolean());//boolean nextBoolean(),随机返回Boolean值
        System.out.println(random.nextDouble());//double范围内
        System.out.println(random.nextInt());//int范围内
        System.out.println(random.nextFloat());//float范围内
        System.out.println(random.nextInt(2)+1);//随机返回(0+1)~2范围内的值

        byte[] bytes=new byte[5];
        random.nextBytes(bytes);//随机取出[数组长度]个byte类型的随机数
        System.out.println(Arrays.toString(bytes));
    }
}

11、时间类

1、Date类

1、构造方法

Date d=new Date();

Date d=new Date(long d);

2、创建对象
Date date=new Date();
System.out.println(date);
//得到的是一串字符串格式的日期Sat Mar 16 16:55:54 CST 2024
3、方法调用 

//方法上有删除线,表示此方法已弃用,有新的替代,但是也可以使用

import java.util.Date;

public class Date1 {
    public static void main(String[] args) {
        Date date=new Date();
        System.out.println(date);
         
        //方法上有删除线,表示此方法已弃用,有新的替代,但是也可以使用
        System.out.println(date.getDay());//这一星期的第几天
        System.out.println(date.getHours());//现在是一天中的几点
        System.out.println(date.getDate());//今天是一个月中的第几天
        System.out.println(date.getMinutes());//现在是几分钟
        System.out.println(date.getMonth()+1);//现在是几月(美国从12月开始)
        System.out.println(date.getSeconds());//现在是几秒
        System.out.println(date.getYear()+1900);//今年是第几年(从1900开始)
import java.util.Date;

public class Date1 {
    public static void main(String[] args) {
        Date date=new Date();
        //时间戳 例如:1709035404026  long类型
        //目的是获取自1970 1.1 0:0:0 至程序运行时刻的毫秒值
        System.out.println(date.getTime());
        
        //将指定的long类型的时间戳构造出一个时间对象
        Date date2=new Date(1709035404026L);
        System.out.println(date2);

        Date date1=new Date();//可以用来计算效率
        System.out.println(date1.getTime() - date.getTime());
    }
}

2、Calender类(日历)

它是一个抽象类

1、获取一个实例
Calendar.getInstance();//他的子类其实就是公历。
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
        Calendar calendar=Calendar.getInstance();//获取日期
        System.out.println(calendar);//获取一个公历
    }
}
 2、方法调用
calendar.get(Calendar.YEAR);//获取今年是多少年
calendar.get(Calendar.MONTH)+1;//现在几月
calendar.get(Calendar.DATE);//第几日
calendar.get(Calendar.DAY_OF_WEEK);//一周第几天(美国从周日开始)
calendar.get(Calendar.DAY_OF_MONTH);//一月第几天
calendar.get(Calendar.DAY_OF_YEAR);//一年第几天
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
        Calendar calendar=Calendar.getInstance();//获取日期  

  
        System.out.println(calendar.get(Calendar.YEAR));//获取今年是多少年
        System.out.println(calendar.get(Calendar.MONTH)+1);//获取现在是几月
        System.out.println(calendar.get(Calendar.DATE));//获取今天是第几天
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));// 一周里面的第几天(美国从周日开始计算)
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//一个月里的第多少天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//一年里面的多少天


        System.out.println(calendar.getTimeInMillis());//结果例如:1710581624654,获取时间戳
    }
}
3、创建一个日期
calendar.set(2024,2,27);//可以自己创建一个日期,进行方法的调用。

3、SimpleDateFormat类(日期格式化)

通常在我们的网页中,输入一个日期,拿到的是他的字符串类型。如何把字符串转为日期类型呢?

1、将字符串日期转为Date对象
Date date=simpleDateFormat1.parse(String s);//利用parse方法将字符串转为Date类型
2、将一个日期对象转为字符串日期
String s=simpleDateFormat.format(Date date);//利用format方法将Date类型转为String类型
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
日期格式化
 */
public class SimpleDateFormat1 {
    public static void main(String[] args) throws ParseException {
        //将字符串日期(标准用-隔开) 转为 Date对象
        String s="2022-02-12";
        SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yyyy-MM-dd");//构造方法传入的是有参的
        Date date=simpleDateFormat1.parse(s);
        System.out.println(date.getYear()+1900);
        //将日期对象 转为 指定格式字符串日期
        Date date1=new Date();
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");//构造方法格式化 2024年02月27日 21:37:48 星期二
        String s1=simpleDateFormat.format(date1);
        System.out.println(s1);

    }
}

 12、BigInteger类

BigInteger类位于java.math包中。

在java中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性。我们都知道 Integer 是 Int 的包装类,int 的最大值为 2^31-1。若希望描述更大的整数数据时,使用Integer 数据类型就无法实现了,所以Java中提供了BigInteger 类。

BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。

import java.math.BigInteger;

public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger bigInteger=new BigInteger("111111111111111111111111111111111111111111");
        BigInteger bigInteger1=new BigInteger("2222222222222222222222222222222222222222222");

        BigInteger b3=bigInteger.add(bigInteger1);
        BigInteger b4=bigInteger1.divide(bigInteger);
        BigInteger b5=bigInteger.multiply(bigInteger1);
        System.out.println(b3);
        System.out.println(b4);
        System.out.println(b5);
   }
}

13、BigDecimal类

java.math包中提供的API类BigDecimal类。

在计算机中float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。

根本原因是:十进制浮点值没有完全相同的二进制表示形式;十进制浮点值的二进制表示形式不精确,只能无限接近于那个值。

但是,在项目中,我们不可能让这种情况出现,使用BigDecimal类解决问题。

注意除法:除法需要注意可能无限循环,需要给定保留的位数,以及舍入模式。

BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
在除法中,常常会遇到死循环。
通过传入参数来解决此类问题scale保留小数的位置,roundingMode取整模式
roundingMode如果为1:向下舍入,如果为二2:向上舍入

import java.math.BigDecimal;

public class BigIntegerDemo {
    public static void main(String[] args) {

        //bigDecimal参数以字符串的形式传入
        System.out.println(0.3+0.36);//结果:0.6599999999999999
        //使用bigDecimal类,达到准确精度
        BigDecimal bigDecimal2=new BigDecimal("0.3");
        BigDecimal bigDecimal3=new BigDecimal("0.36");
        System.out.println(bigDecimal2.add(bigDecimal3));//0.66

        //在除法中,常常会遇到死循环。
        //通过传入参数来解决此类问题scale保留小数的位置,roundingMode取整模式
        BigDecimal bigDecimal4=new BigDecimal("10");
        BigDecimal bigDecimal5=new BigDecimal("3");
        System.out.println(bigDecimal4.divide(bigDecimal5,2,2));//roundingMode如果为1:向下舍入,如果为二2:向上舍入
        //除法需要注意可能无限循环,需要给定保留的位数,以及舍入模式。
    }
}

持续更.......

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值