系统常用类

系统常用类

一、Object类

万类之祖Object类,Java中的所有类都直接或间接的继续自Object。

1、toString()方法

用于打印对象地址,可以重写此方法

public class TestObject {

    public static void main(String[] args) {
        Object ob1 = new Object();
        Object ob2 = new Object();

        System.out.println(ob1.toString());
        System.out.println(ob2.toString());
    }
}

在这里插入图片描述

2、equals()方法

直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象,所谓同一对象就是指内存中同一块存储单元,如果this和obj指向同一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则返回false,即便是内容完全相等的两块不同的内存对象,也返回false

public class TestObject {

    public static void main(String[] args) {
        Object ob1 = new Object();
        Object ob2 = new Object();

        System.out.println(ob1.toString());
        System.out.println(ob2.toString());

        System.out.println(ob1.equals(ob2));
    }
}

在这里插入图片描述

二、String类

1、字符串

字符串是字符的序列,它是组织字符的基本数据结构,从某种程度上来说有些类似于字符的数组。

在Java中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类:

一类是创建之后不会再做修改和变动的字符串常量–String;对于字符串常量,由于程序中经常需要对它做比较,搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序对该对象完成上述操作。在Java中,存放字符串常量的对象用String类。

一类是创建之后允许再做更改和变化的字符串变—StringBuffer / StringBuilder;对于字符串变量,由于程序中经常需要对它做添加,插入,修改等操作,一般存放在StringBuffer/ StringBuilder类的对象中。 StringBuffer是线程安全;StringBuilder没有实现线程同步,但速度更快建议使用。

①String
public class TestString {

    public static void main(String[] args) {
        
/*
Java.lang.String类是一个特殊的类,可以不用new创建对象;
如:String str1=“Hello world!”; Java编译器自动为字符串常量生成一个String类的实例,
因此可以用字符串常量直接初始化一个String对象;
程序对字符串处理最多,因此String提供了很多字符串操作方法。
*/
        
        String str1 = "GOK";
        String str2 = "GOK";

        String str3 = new String("GOK");
        String str4 = new String("GOK");

        System.out.println(str1 == str2);
        System.out.println(str3 == str4);

        System.out.println(str1.equals(str2));
        System.out.println(str3.equals(str4));
    }
}

在这里插入图片描述
在这里插入图片描述

System.out.println(str1 == str2);//true
System.out.println(str3 == str4);//flase
System.out.println(str1.equals(str2));//true
System.out.println(str3.equals(str4));//true
//String类中重写了equals()方法,只要值一样就返回true
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
②StringBuffer

StringBuffer是线程同步,是安全的;

public class StringBufferAndStringBuilder {

    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(1);
        stringBuffer.append("中国");
        System.out.println(stringBuffer);
    }
}

在这里插入图片描述

//常用方法
public class Demo01 {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("goktech");

        str.append("GOK");//追加
        System.out.println(str);

        str.insert(3, "GOK");//添加
        System.out.println(str);

        str.replace(0, 3, "GOK");//修改
        System.out.println(str);

        str.delete(0, 3);//删除
        System.out.println(str);
    }
}

在这里插入图片描述

③StringBuilder

StringBuilder没有实现线程同步,但速度更快建议使用。

public class StringBufferAndStringBuilder {

    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("猴子");
        stringBuilder.append("八戒");
        System.out.println(stringBuilder);
        stringBuilder.reverse();
        System.out.println(stringBuilder);
    }
}

在这里插入图片描述

2、构造函数

①将字符数组转化成字符串
public String(char value[]) {
        this.value = Arrays.copyOf(value, value.length);
    }

在这里插入图片描述

②将字符数组转化成字符串(从offset位开始的count位)
public String(char value[], int offset, int count) {
        if (offset < 0) {
            throw new StringIndexOutOfBoundsException(offset);
        }
        if (count <= 0) {
            if (count < 0) {
                throw new StringIndexOutOfBoundsException(count);
            }
            if (offset <= value.length) {
                this.value = "".value;
                return;
            }
        }
        // Note: offset or count might be near -1>>>1.
        if (offset > value.length - count) {
            throw new StringIndexOutOfBoundsException(offset + count);
        }
        this.value = Arrays.copyOfRange(value, offset, offset+count);
    }

在这里插入图片描述

③将数字数组转化成字符串(将ASCll值转化成 字符输出)

在这里插入图片描述

3、常用的方法

public class TestString {

    public static void main(String[] args) {
        String str1 = "goktechg";
        String str2 = "GOKTECHG";
        String str3 = "gok,GOK";
        String str4 = "gok,GOK";

//        1. int length ();获取字符串长度
        System.out.println("1:" + str1.length());
//        2. char charAt ( int index);获取字符串相应位置上的字符
        System.out.println("2:" + str1.charAt(0));
//        3. int indexOf (String sub); 获取字符在字符串上的位置,有重载方法
        System.out.println("3:" + str1.indexOf('g'));//从开头开始索引
//        4. int lastIndexOf (String sub);//有重载方法
        System.out.println("4:" + str1.lastIndexOf('g'));//从末尾开始索引
//        5. int compareTo (String oth);
//        6. String concat (String oth) 在字符串末尾添加字符串
        System.out.println("6:" + str1.concat("GOK"));
//        7. byte[] getBytes (); 将字符串中每一个字符转化成ASCLL码,再存入数组中,有重载方法
        byte[] by1 = str1.getBytes();
        System.out.print("7:");
        for (int i : by1
        ) {
            System.out.print(i + " ");
        }
        System.out.println();
//        8. char[] toCharArry ();将字符串中每一个字符存入数组中
        char[] ch1 = str1.toCharArray();
        System.out.print("8:");
        for (char i : ch1
        ) {
            System.out.print(i + " ");
        }
        System.out.println();
//        9. String toLowerCase ()将字符串全部变成小写
        System.out.println("9:" + str2.toLowerCase());
//        10. String toUpperCase ()将字符串全部变成大写
        System.out.println("10:" + str1.toUpperCase());
//        11. String replace(char ochar,char nchar);将指定的字符变成新的字符
        System.out.println("11:" + str1.replace("g", "G"));
//        12. String replaceAll(String regex,String nchar);多个字符的转化
        System.out.println("12:" + str1.replaceAll("gok", "GOK"));
//        13. String[] split(String regex);将字符串以","分割成新的字符串,若要以"."分割,则需要转义字符"\\. "
        String[] ch2 = str3.split(",");
        System.out.print("13:");
        for (String str : ch2
        ) {
            System.out.print(str + " ");
        }
        System.out.println();
//        14. substring(int start,int end);截取字符串,有重载方法(注意)
        System.out.println("14:" + str2.substring(1, 3));//包含头不包含尾
//        15. startsWith(String str);判断字符串是否“gok”开头,用于查找“gok”开头的文件
        System.out.println("15:" + str1.startsWith("gok"));
//        16. endsWith(String str);判断字符串是否“ch”结尾,用于查找相应后缀名的文件
        System.out.println("16:" + str1.endsWith("chg"));
//        17. equals(); 判段字符串是否相等,String重写了equals方法,因此只需要值相等
        System.out.println("17:" + str3.equals(str4));
//        18. equalsIgnoreCase();判段字符串是否相等,且不区分大小写
        System.out.println("18:" + str1.equalsIgnoreCase(str2));
//        19. trim()去除字符串中的左右空格
        String trim = "   aa   ".trim();
        System.out.println("19:" + trim);

    }
}

在这里插入图片描述

4、正则表达式

正则表达式是通过模式匹配实现对字符的查询,提取,替换,分割;从而简化操作对字符的处理

主要功能如下:

①测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否是一个电话号码或一个身份证号码。这称为数据有效性验证。

②替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后替换为其他文字。

③根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

如果原来没有使用过正则表达式,那么请想一下在硬盘上是如何查找文件的?

用 ? 和 * 字符来帮助查找您正寻找的文件: ? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。

一个如 ‘data?.dat’ 的模式可以找到下述文件:data1.dat ; data2.dat ; datax.dat ; dataN.dat

如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。‘data*.dat’ 可以匹配下述所有文件名:data.dat ; data1.dat ; data2.dat ; data12.dat ; datax.dat ; dataXYZ.dat

而正则表达式的功能更强大,也更灵活

①定位符

两个特殊的符号“^”和“$”。他们的作用是分别指出一个字符串的开始和结束。

\b匹配一个单词边界,也就是指单词和空格间的位置。

\B匹配非单词边界。例如:

1、 “^sato”:表示所有以“s”开始的字符串 后面是ato的字符串,

2、 “sato$”:表示所有以“o”结尾的字符串 前面是sat

​ 这两个都表示sato字符串

3、 “^sato$”:表示开始和结尾都是"sato"的字符串,就是"sato"字符串本身。

4、 “sato”:表示“sato“字符串

“\bcha”:匹配”chapter” “ese\b”:匹配”chinese”

②普通字符

普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。

最简单的正则表达式是一个单独的普通字符,可以匹配所搜索字符串中的该字符本身。例如,单字符模式 ‘A’ 可以匹配所搜索字符串中任何位置出现的字母 ‘A’。

比如a-z A-Z 0-9任意字符

“abc” “110” “aBc110”

③转义字符

空格符、制表符、换行符、回车符、 单引号符、双引号符、反斜线、百分符、下划线符等,要用到转义序列。所有的转义序列都用反斜杠()打头。

制表符的转义序列是:\t。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:^\t ;

类似的,用\n表示“新行符”;\r表示回车符;\b表示退格符;\‘表示单引号符; \“表示双引号符;%表示百分号符;_表示下划线符;-表示中线; 反斜杠本身用\表示;句号.用.表示。

④限定字符

特殊字符:“*”、“+”和“?”。表示一个或一序列字符重复出现的次数。

"*“ 没有或更多(与{0, }作用相同)

"+“ 一次或更多(与{1, }作用相同)

“?” 没有或一次(与{0,1}作用相同)

例:

1、“ab*”:表示在字符串中有一个a后面跟着零个或若干个b。如:“a”,“ab”,"abbb"等

2、 “ab+”:表示在字符串中有一个a后面跟着至少一个b或者更多

3、 “ab?”:表示在字符串中有一个a后面跟着零个或者一个b

4、 “a?b+$”:表示在字符串的末尾有零个或一个a跟着一个或几个b

5、 “^ [0-9]+$”:表示所有的正数

6、 “^-?[0-9]+$”:表示所有的整数

7、 “^-?[0-9].?[0-9]$”:表示所有的数字(整数,小数)

也可以使用范围,用大括号括起,用以表示重复次数的范围。

1、“ab{2}”:表示一个字符串有一个a跟着2个b(“abb”)

2、“ab{2,}”:表示一个字符串有一个a跟着至少2个b

3、“ab{3,5}”:表示一个字符串有一个a跟着3到5个b

注意:

1、要匹配下限,必须指定范围的下限(如:"{0,2}“而不是”{,2}")

2、"*"、"+“和”’?“相当于”{0,}"、"{1,}“和”{0,1}"。

⑤特殊字符-|

特殊字符:“|”,表示“或”操作:

例:

1、“hi|hello”:表示一个字符串里有"hi"或者"hello"

2、"(b|cd)ef":表示"bef"或"cdef"

3、"(a|b)*c":表示一串"a"、“b"混合的字符串后面跟一个"c”

⑥特殊字符-.

特殊字符:“.”,匹配除换行符 \n之外的任何单字符,要匹配.请使用.

例:

1、“a.[0-9]”:表示一个字符串有一个"a"后面跟着一个任意字符和一个数字

2、"^.{3}$":表示有任意三个字符的字符串(长度为3个字符)

⑦方括号

方括号“[]”,表示某些字符允许在一个字符串中的某一特定位置出现:

例:

1、"[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b")

2、"[a-d]":表示一个字符串包含小写的’a’到’d’中的一个(相当于"a|b|c|d"或者"[abcd]")

3、"^ [a-zA-Z]":表示一个以字母开头的字符串

4、"[0-9]%":表示一个百分号前有一位的数字

5、",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束

6、[a-z]:匹配所有的小写字母中的一个

7、[A-Z]:匹配所有的大写字母中的一个

8、[\f\r\t\n]:匹配所有的空白字符

9、[0-9]:匹配所有的数字中的一个

⑧否定符号

不允许出现的字符的表示方法:在方括号里用‘’表示不希望出现的字符,‘’应在方括号里的第一位即[^]。

例:

"%[^a-zA-Z]%"表示两个百分号中不应该出现字母)。

⑨简写符号

其它一些简捷正则表达式写法:

例:

\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。

\d 匹配一个数字字符。等价于 [0-9]。

\D 匹配一个非数字字符。等价于 [^0-9]。

注:详细可参考本章对应文档:

正则表达式基本语法.html

⑩特殊符号-()

( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。

例子:

“^([0-9]|[a-z])+$”:表示任意数字和字母的组合

“(\d){1,12}”:表示1位到12位数字

示例1电话号码
public class TestRe {

    public static void main(String[] args) {
        String tel = "13670000001";
        String rex = "1[0-9]{10}";
        if (tel.matches(rex)) {
            System.out.println("是手机号");
        } else {
            System.out.println("不是手机号");
        }
    }
}

在这里插入图片描述

正则表达式自动生成

https://www.sojson.com/regex/generate

三、基本类型 包装类型

在Java中,一切都是对象,但基本的数据类型不是对象。因此在JDK中提供了基本数据类型的封装类对象。

建议后期代码均用包装类型

八个基本数据类型对应的封装类(wrapper class):
boolean  -->  Boolean
char  -->  Character
byte  -->  Byte
short  --->  Short
int  -->  Integer
long  -->  Long
float  -->  Float
double  -->  Double
八个基本数据类型都重写了Object中的hashCode(), equals(), toString()方法。

编译环境在JDK1.5之后支持基本数据类型与对应的封装类型的自动转换:例如:int 转换成Integer 自动转换;double 与Double 都是自动转换……

1、类型转化

①基本类型—>封装类型
public static void main(String[] args) {
        Integer num1 = new Integer("10");
        System.out.println(num1);
    }
②封装类型—>基本类型
public static void main(String[] args) {
        Integer num1 = new Integer("10");
        int num2 = num1.intValue();
        System.out.println(num2);
    }
③基本类型—>字符串
public static void main(String[] args) {
        Integer num1 = new Integer("10");
        String str = String.valueOf(num1);
        System.out.println(str);
    }
④字符串—>基本类型
public static void main(String[] args) {
        int num3 = Integer.parseInt("100");
        System.out.println(num3);
    }

2、常用方法

static boolean isDigit(char ch) //是否是数字
static boolean isLetter(char ch) //是否是字母
static boolean isLetterOrDigit(char ch)//  是否是字母或数字
static boolean isLowerCase(char ch) 小写
static boolean isUpperCase(char ch) 大写
static char toLowerCase(char ch)  转换成小写
static char toUpperCase(char ch)  转换成大写 
static boolean isSpaceChar(char ch) 
String toString() 

四、数学函数类

Math 类包含基本的数字操作,如指数、对数、平方根和三角函数;Math中方法和常量都是静态的,因此可以通过类名直接调用。

1、Math常用方法

static double abs(double a); //有重载方法 绝对值
static double ceil(double a); //有重载方法 大于等于
static double floor(double a); //有重载方法 小于等于
static long round(double a); //有重载方法 四舍五入
static double pow(double a, double b); //次方
static double random();//随机数
static double max(double a,double b);//求更大值
static double min(double a,double b);//求更小值

2、Math(Random)

Math中的random方法返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。

获取0到10之间的随机整数的方法是:

double d1 = Math.random() * 10;
int in1 = Math.round(d1);
或用下面的方法:
double d2 = Math.random() * 11;
int in2 = (int)d2;
//Random 随机流工具类
Random random = new Random();
//随机整数 范围 0-参数  0<= rr < 9
int rr = random.nextInt(9);

五、系统时间

1、系统时间获取

long System.currentTimeMillis();

返回以毫秒为单位的当前时间,返回当前时间与 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。

public class Demo {
    public static void main(String[] args) {
        Long currentTimeMillis = System.currentTimeMillis();
        System.out.println(currentTimeMillis);
    }
}

在这里插入图片描述

2、Date类

类Date 表示特定的瞬间,精确到毫秒 ,用于表示日期时间。

public class Demo {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);
    }
}

在这里插入图片描述

3、日期格式化

DateFormat抽象类提供了格式化日期的方法, SimpleDateFormat是它的简单实现类。可以将日期格式化成指定格式的字符串;也可将指定格式字符串格式化为日期;

public class Demo {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //日期转字符串
        String dateString = dateFormat.format(date);
        System.out.println(dateString);
    }
}

在这里插入图片描述

SimpleDateFormat类中模式字符:
y  年  Year  1996; 96  
M  年中的月份  Month  July; Jul; 07  
d  月份中的天数  Number  10  
E  星期中的天数  Text  Tuesday; Tue  
H  一天中的小时数(0-23)  Number  0  
h  am/pm 中的小时数(1-12)  Number  12  
m  小时中的分钟数  Number  30  
s  分钟中的秒数  Number  55  
S  毫秒数 
例:日期转化为指定格式字符串
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
System.out.println(dateString);
例:指定格式字符串转化为日期
String str = "2009-02-18 23:23:32";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = sdf.parse(str, new ParsePosition(0));
System.out.println(date1);

在这里插入图片描述

4、Calendar类

Calendar 类是一个抽象类,用于描述一个日历。这个类不能直接初始化,但有个类方法getInstance() 用于创建Calendar对象。

public class Demo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
    }
}

六、精度计算

1、BigDecimal类

double d1 = 0.3 * 3; 结果不是0.9,浮点数表示的字长是有限的且是离散的,并且存在舍入误差,结果只能是一个大约数。最好不要使用浮点数进行比较

BigDecimal类可以实现精度计算

BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换 ;

public class Demo {
    public static void main(String[] args) {
        double num1 = 0.3;
        System.out.println(num1 * 3);

        BigDecimal num2 = new BigDecimal("0.3");//一定要为字符串
        BigDecimal num3 = new BigDecimal("3");
        BigDecimal num4 = num2.multiply(num3);
        System.out.println(num4);
    }
}

在这里插入图片描述

常用方法
BigDecimal add(BigDecimal augend); // +
BigDecimal subtract(BigDecimal subtrahend); // -
BigDecimal multiply(BigDecimal multiplicand); // *
BigDecimal divide(BigDecimal divisor);  // /
BigDecimal setScale(int newScale, int roundingMode); 

2、数字格式化

NumberFormat 是所有数字格式的抽象基类。此类提供了格式化和分析数字的接口

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能;

public class Demo {
    public static void main(String[] args) {
        NumberFormat format = new DecimalFormat();

        format.setMinimumIntegerDigits(4);//设置整数部分最小位数
        double num1 = 123.0;
        String str1 = format.format(num1);
        System.out.println(str1);

        format.setMaximumIntegerDigits(4);//设置整数部分最大位数
        double num2 = 12345.0;
        String str2 = format.format(num2);
        System.out.println(str2);

        format.setMinimumFractionDigits(3);//设置小数部分最小位数
        double num3 = 12345.0;
        String str3 = format.format(num3);
        System.out.println(str3);

        format.setMaximumFractionDigits(3);//设置小数部分最小位数
        double num4 = 12345.0000;
        String str4 = format.format(num4);
        System.out.println(str4);
    }
}

在这里插入图片描述

public class Demo {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("###,###");//设置按位数分割
        double num1 = 123456789.00;
        String format = df.format(num1);
        System.out.println(format);

        DecimalFormat df1 = new DecimalFormat("###,###.00");//设置小数位数
        format = df1.format(num1);
        System.out.println(format);

        DecimalFormat df2 = new DecimalFormat("###,###.00%");//设置百分比
        format = df2.format(num1);
        System.out.println(format);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值