常用类库.md

1、 字符串操作

赋值方式

  1. String name = "小白";
  2. String name = new String("小白");
String name = "小王";
String name = new String("小王"); // 创建了两个小王,都在常量池中
/* 编译器和运行期
如果在编译器可以被确定,那么就使用已有的对象,否则会创建新的对象,
*/
String a = "a";
String a1 = a + 1; // 由于编译的时候,不能确定a1,因为a是变量,所以会在堆中创建a1
String a2 = "a1";   // 存在于常量池中
System.out.println(a1 == a2); // false

final String b = "b";   // b 是可以被确定的
String b1 = b + "1";
String b2 = "b2";
System.out.println(b1 == b2); // true

String c = getString();
String c1 = c + 1;
String c2 = "c1";
System.out.println(c1 == c2);   // false

final String d = getD();
String d1 = d+1;
String d2 = "d1";
System.out.println(d1 == d2); // false

private static String getString(){
	reutrn "c";
}
private Static String getD(){
    return "D";
}

String 类字符与字符串操作的方法

charAt() toCharArray() String

String 类字节与字符串操作方法

getByte()

判断是否以指定内容开头或结尾

startsWith( String prefix) endsWith(String suffix) startsWith(String prefix, int toffset) (从指定的位置开始判断是否以指定的内容开头)

String 类替换操作

replace(char oldChar, char newChar) 替换指定所有字符

replace(CharSequence target, CharSequence replacement) 替换指定字符串

replaceAll(String regex, String replacement) 替换指定字符串

replaceFirst(String regex, String replacement) 替换第一个满足条件的字符串

String 字符串截取操作:

substring(int begin) 从指定位置开始一直截取到末尾

substring(int begin, int end) 截取指定范围的字符串 (前面including 后面excluding)

String 类字符串拆分操作

split(String regex) regex(String regex, int limit) (指定拆分个数)

字符串查找

contains(String s)

public int indexOf(int ch) // 查找 asx 码 并不是直接查找数字

public int indexOf(String str) // 查找字符串是否存在,存在就返回位置,不存在返回 -1

public int lastIndexOf(int ch) // asx 码

public int lastIndexOf(int ch, int fromIndex) // asx 码

public int lastIndexOf(String str) // 查找字符串是否存在

public int lastIndexOf(String str, int fromIndex) // 从指定位置开始查找字符串是否存在

public boolean inEmpty() 判断是否为空 指的是内容为""

public int length()

public String toLowerCase()

public String toUpperCase()

public String trim() 去掉前后空格, 中间空格不去

public String concat() 字符串连接操作

valueOf(Object object) 啥都可以转成字符串

StringBuffer

目的是解决字符串相加时带来的性能问题(常量与变量)

内部实现采用字符数组,默认数组长度为16,超过数组大小时,动态扩充的算法是原来长度*2 + 2

所以当我们预知要添加的数据长度时,建议使用带初始化容量的构造方法,来避免动态扩充的次数,从而提高效率, 因为线程是安全的,所以影响性能 性能: StringBuilder < StringBuffer < String

public String StringBuffer()

public StringBuffer(String str)

public StringBuffer(CharSequence seq)

public StringBuffer append(数据类型 b)

public StringBuffer delete(int start, int end) 删除指定位置的内容

public int indexOf(String str)

public StringBuffer insert(int offset, 数据类型 b) 在指定位置上添加一个内容

public StringBuffer replace(int start, int end, String str) 将指定范围的内容替换成其他内容

public String substring(int start, int end) 截取指定范围的字符串

public String substring(int start ) 字符串截取

public StringBuffer reverse() 字符串反转

StringBuilder

不保证同步, 建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快

StringBuffer 是线程安全的,性能低,适合在多线程的使用,JDK1.0

StringBuilder 是线程不安全的,性能高,适合在单线程中使用,这种形框占大多数, JDK1.5添加


字符串相加,在编译后,会使用StringBuilder 优化代码,实现拼接,但是每次相加后要调用toString(), 会产生StringBuilder 对象实现拼接,会有垃圾。

2、程序国际化

Internationalication : 国际化程序这样理解:

同一套程序代码可以在各个语言环境下使用, 各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国际化程序完成的就是这样的一个功能。

Local e类

表示特定的地理、文化、政治。需要Local 来执行其任务操作称为语言环境敏感的操作,它使用Local 为用户量身定制信息。例如显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值

使用此类中的构造方法来创建Locale:

Locale(String language)

Locale(String language, String country) 通过静态方法创建Local

getDefault()

ResourceBundle 类

国家化的核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件后缀是*.properties), 属性文件中的格式采用 “key=value” 的格式进行操作

ResourceBundle 类表示的是一个资源文件的读取操作,所有的资源文件需要使用ResourceBundle 进行读取,读取的时候不需要加上文件的后缀

getBundle(String baseName)

getBundle(String baseName, Locale locale)

getString(String key)

处理动态文本

前面的示例读取的内容都是固定的,如果现在假设要想打印这样的信息 “欢迎,XXX”,具体的名字不是固定的,那么就要用动态文本进行程序的处理,要使用java.text.MessageFormat 类完成。这个类是java.text.Format 的子类

package language;

import java.sql.SQLOutput;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;

public class Demo {

    public static void main(String[] args){

        Locale locale_CN = new Locale("zh","CN");

        Locale locale_US = new Locale("en","US");

        Locale locale_default = Locale.getDefault();
        Scanner input = new Scanner(System.in);
        ResourceBundle r = ResourceBundle.getBundle("language.info",locale_CN);
        System.out.println(r.getString("system.name"));
        System.out.println(r.getString("input.username"));
        String username = input.nextLine();
        System.out.println(r.getString("input.password"));
        String password = input.nextLine();

        if("admin".equals(username) && "123".equals(password)){
            System.out.println(r.getString("login.success"));
            String welcome = r.getString("welcome");
            String truewelcome = MessageFormat.format(welcome,username);
            System.out.println(truewelcome);
        }else{
            System.out.println(r.getString("login.error"));
        }

    }

}

还要编写properties 文件

system.name=caonima
input.username=Input caonima
input.password=Input caonima
login.success=Login caonima
login.error=Login caonima
welcome=welcomeChinese {0}

3、 Math 与 Random类

Math

abs random round sqrt

Random

Date

Calender

DateFormat

        System.out.println(Math.PI);   //3.141592653589793
        System.out.println(Math.abs(-111));  //111
        System.out.println(Math.round(Math.random()*1000)/10.0); 
        System.out.println(Math.sqrt(2)); //1.4142135623730951
        System.out.println(Math.floor(1.2)); // 1.0
        System.out.println(Math.round(1.2)); // 1

        DateFormat df = new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss sss");
        String nowDate = df.format(new Date());
        System.out.println(nowDate); //2018年08月23日 16:42:17 017

4、 日期操作类

5、 对象比较器

如果想用Arrays.sort() 就要实现comparable 接口, 或者设计一个新的实现了comparator 的类,传入new comparator

Comparable

此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的compareTo方法称为它的自然比较方法,如果实现Comparable 接口, 需要实现comparaTo 方法

Comparator

加上@Override 后, 如果方法父类没有,那么会报错

6、 对象的克隆

将一个对象复制一份,称为对象的克隆技术

在Object 类中存在一个clone() 方法, 如果某个类想要被克隆,则对象所在类必须实现Cloneable 接口,此接口没有任何方法,是一个标记接口

native 关键字表示实现使用了C ++

7、 System 与Runtime 类

exit(int status) : 退出程序, 0代表正常退出, 非0 代表异常退出

System.getProperty(String key)

java.version Java运行时环境版本

java.home java 目录目录

os.home 操作系统的名称

os.version 操作系统的版本

user.name 用户的账户名称

user.home 用户的主目录

user.dir 用户的当前工作目录

Runtime

        Runtime rt = Runtime.getRuntime();
        System.out.println(rt.availableProcessors());  //处理器数量
        System.out.println(rt.totalMemory());   // JVM总内存
        System.out.println(rt.freeMemory());  // Jvm 空间内存
        System.out.println(rt.maxMemory());   // jvm 可用最大内存数
        rt.exec("notepad");  //打开记事本

8、 数字处理工具类

BigInteger :

可以让超过Integer 范围内的数据进行运算

add subtract multiply divide divideAndRemainder

        String val1 = "4444444444444444444";
        String val2 ="5454545454545454545";
        BigInteger b1 = new BigInteger(val1);
        BigInteger b2 = new BigInteger(val2);
        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2));
        System.out.println(b1.remainder(b2));
        System.out.println(Arrays.toString(b2.divideAndRemainder(b1)));

BigDecimal

由于在运算的时候,float 和double 很容易丢失精度,为了能精确表示,java 提供了BigDecimal

add subtract multiply divide

        String val1 = "44444.44444444444444";
        String val2 ="4";
        BigDecimal b1 = new BigDecimal(val1);
        BigDecimal b2 = new BigDecimal(val2);
        System.out.println(b1.add(b2));
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2));

DecimalFormat

        System.out.println(pi);
        System.out.println(new DecimalFormat("0").format(pi));   //3
        System.out.println(new DecimalFormat("0.00").format(pi));  //3.14
        System.out.println(new DecimalFormat("00.0000").format(pi));  //03.1416
        System.out.println(new DecimalFormat("#").format(pi));  //3
        System.out.println(new DecimalFormat("#.##%").format(pi));  //314.16%

        long num = 123456789;
        System.out.println(new DecimalFormat("###,###").format(num)); //123,456,789

9、 MD5 工具类

MD5 全称为 Message-Digest Algorithm

MessageDigest md5 = MessageDigest.getInstance(“MD5”);

// jdk 1.8 新增Base64

String newstr = Base64.getEncoder().encodeToString(md5.digest(str.getByte(“utf-8”)));

        String password = "admin123456";
        String savePassword ="pmq7VoTEWWLYh1ZPCDRujQ==";
        try{
            MessageDigest md = MessageDigest.getInstance("md5");
            byte[] bytes = md.digest(password.getBytes("UTF-8"));
            System.out.println(Arrays.toString(bytes));
            String mdStr = new String(bytes);

            String str = Base64.getEncoder().encodeToString(bytes);
            System.out.println(str);

        }catch (Exception e){

        }

10、 二叉树

11、 JDK 1.8 新特性

函数式编程

允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据进行处理。

Lambda 表达式

允许把函数作为一个方法的参数,或者把代码看成数据,Lambda 表达式用于简化JAVA 中接口式的匿名内部类。函数式接口就是一个具有一个方法的普通接口, 这个实现了策略模式

语法: (参数1, 参数2) -> { . . .}

默认方法与静态方法并不影响函数式接口的契约,可以任意使用

public class LambdaDemo {
    public static void main(String[] age){
        IEat ieat = new IEatImpl();
        ieat.eat("apple");

        IEat ieat2 = new IEat() {
            public void eat(String thing) {
                System.out.println("eat"+thing);
            }};
        ieat2.eat("banana");

        // 好处: 1代码更简介, 2 不会单独生成class文件
        IEat ieat3 = (thing)->{ System.out.println("eat peal"); };
        ieat3.eat("peal");
        
        Student[] students = {new Student("张三", 18), new Student("张四",20), new Student("张一", 15)};
        
        Arrays.sort(students, (o1,o2)->o1.getAge() - o2.getAge());

    }
}

interface IEat{
    public void eat(String thing);
}

class IEatImpl implements IEat{
    public void eat(String thing){
        System.out.println("eat "+thing);
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值