目录
String类
String是字符串类型,是“不可变”字符串,无线程安全问题,在java.lang.String包下;
注意事项:
String str = "abc"和String str = new String("abc");的区别!
String在设计之初,虚拟机就对他做了特殊化,将字符串保存在虚拟机内部的字符串常量池中,一旦我们要创建一个字符串,虚拟机就先去常量池中检查是否创建过这个字符串,如果有则直接引用,String对象因为有了上述的优化,就要保证该对象的内容自创建开始就不能改变!所以对字符串的任何变化都会创建新的对象,而不是影响以前的对象!
String的基本方法:
equals():比较两个字符串是否相等,区分大小写;
String s = "ABC";
"abc".equals(s)//返回false;
当一个字符串变量和一个字面量进行比较的时候,应该用字面量去和变量进行比较,因为这样不会产生空指针异常(NullPointerException)
equalsIgnoreCase():比较两个字符串是否相等,不区分大小写(一般用作验证码比较);
String s = "ABC";
"abc".equalsIgnoreCare(s)//返回true;
concat():将指定的字符串连接到该字符串的末尾,并返回新字符串;
String s = "123";
s.concat(456)//返回的是“123456”
indexOf():返回指定字符第一次出现的索引,如果找不到就返回-1,位置是从0开始;
String s = "abcdabcd";
s.indexOf("c")//输出的是2;
//也可以指定从哪个位置开始查找
s.indexOf("c",3)//输出的是6;
sbustring():截取字符串,下标从0开始,包头不包尾;
String s = "123456";
s.substring(0,3)//返回1234;
s.substring(1)//返回23456;如果只输入一个值就是截取到结尾
split()通过指定的正则,对此字符串进行分割并返回一个String数组;
String s = "Hello_World";
String[] s1 = s.split("_");//返回[Hello,World]
valueOf():可以将指定的类型转换为String类型的字符串;
int i = 1;
String.valueOf(1)//返回"1"
replace():替换指定的字符串/字符;
String s = "abcdefg";
s.replace("de","ab")//返回"abcabfg";
trim():去除字符串前导和结尾的空格;
String s = " abc ";
s.trim();//返回"abc";
charAt():返回指定索引处的值;
String s = "abcd";
s.charAt(2)//返回'c';
length():返回此字符串的长度;
String s = "abcd";
s.length();//返回4;
toLowerCase():所有字符转换为小写形式;
toUpperCase():所有字符转换为大写形式;
startsWith():判断此字符串是否以指定的字符串开头;
endsWith():判断此字符串是否以指定的字符串结尾;
isEmpty():判断此字符串是否为空;
hashCode():返回此字符串的哈希值;
StringUtils类
针对字符串操作的工具类,提供了一系列静态方法,在Apache Commons-lang包下,需要下载;
StringUtils常用方法:
1)String repeat(String str,int repeat):重复字符串repeat次后返回;
2)String join(Object[] array,String str):将一个数组中的元素连接成字符串;
3)String leftPad(String str,int size,char padChar):向左边填充指定字符padChar,以达到指定长度size;
4)String rightPad(String str,int size,char padChar):向右边填充指定字符padChar,以达到指定长度size;
StringBuilder类
与String对象不同,StringBuilder封装“可变”的字符串,有线程安全问题,对象创建后,可通过调用方法改变其封装的字符序列;
StringBuilder常用方法:
1)追加字符串:StringBuilder append(String str);
2)插入字符串:StringBuilder insert(int index,String str);插入后原内容一次后移;
3)删除字符串:StringBuilder delete(int start,int end);
4)替换字符串:StringBuilder replace(int start,int end,String str);包含开头不包含结尾 ;
5)字符串翻转:StringBuilder reverse();
StringBuilder builder = new StringBuilder();
builder.append("大家好!").append("好好学习").append("天天向上");
System.out.println(builder.toString);
builder.insert(4,"!");
System.out.println(builder.toString);
builder.replace(5,9,"Good Good Study!");
System.out.println(builder.toString);
builder.delete(9,builder.length());
System.out.println(builder.toString);
注意事项:
- 该类用于对某个字符串频繁的编辑操作,使用StringBuilder可以在大规模修改字符串时不开辟新的字符串对象,从而节约内存资源,所以,对有这大量操作字符串的逻辑中,不应该使用String而应该使用StringBuilder;
- append是有返回值得,返回类型是StringBuilder,而返回的StringBuilder其实就是自己,append方法的最后一句就是return this;
- StringBuilder与StringBuffer是一样的,都是可改变的字符串,但是StringBuffer是线程安全的,效率低,需要JDK1.5+;
- StringBuilder不是线程安全的,效率高;
- 在多线程操作的情况下,使用StringBuffer,是因为StringBuffer是线程安全的,它难免要顾及安全问题,而进行必要的安全验证操作,所以效率上要比StringBuilder低,根据实际情况选择;
效率高低顺序:
StringBuilder > StringBuffer > String;
Date类
java.util.Date类用于封装日期及时间信息,一般仅用它显示某个日期,不对他做任何操作处理,做处理用Calendar类,计算方便;
Date date = new Date()//创建一个Date实例,默认的构造方法创建的日期代表当前系统时间
System.out.println(date);
long time = date.getTime();//查看date内部的毫秒值;
date.setTime(time+1000*60*60*24);设置毫秒数让一个时间Date表示一天后的当前时间;
Calendar类
java.util.Calendar类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算;
Calendar.DAY_OF_MONTH:月里面的天---号;
Calendar.DAY_OF_WEEK: 星期里面的天---星期几;
Calendar.DAY_OF_YEAR: 年里面的天;
Calendar calendar = Calendar.getInstance();//构造出来表示当前时间的日历类;
Date now = calendar.getTime;//获取日历所描述的日期;
calendar.set(Calendar,YEAR,2020);//设置日历表是2020年;
calendar.set(Calendar,DAY_OF_MONTH,20);//设置日历表示20号;
calendar.add(Calendar,DAY_OF_YEAR,22);//得到22天后的日期;
calendar.add(Calendar,DAY_OF_YEAR,-10);//得到10天前的日期;
calendar.add(Calendar,MONTH,1);//得到一个月后的日期;
获得当前日历表示的日期中的某个时间单位可以使用get方法;
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
SimpleDateFormat类
java.text.SimpleDateFormat类,日期转换类,该类的作用是可以很方便的在字符串和日期类之间相互转换;
这里我们在字符串与日期类间相互转换,是需要一些约束的,"2020-07-20"这个字符串如何转换为Date对象?Date对象又如何转换为字符串?
常用格式字符串:
//创建一个SimpleDateFormat并告知他要读取的字符串格式;
SimpleDdateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateFormat = "2020-07-20";//创建一个日期格式字符串;
Date now = new Date);
//将字符串转换为日期;
Date date = sdf.parse(dateFormat);
//将日期对象转换为字符串;
sdf.foermat(now);
DateFormat类
java.textDateFormat类(抽象类)是SimpleDateFoemat类的父类,用的少,没有SimpleDateFormat灵活。
包装类
JAVA语言的8中基本类型分别对应了8中“包装类”。每一种包装类都封装了一个对应的基本类型成员变量,同时还提供了针对该数据类型的实用方法;
- 包装类的目的:用于将基本类型数据当做引用类型看待;
- 包装类的名字,除了Integer(int)、Character(char)外,其余包装类名字都是基本数据类型名首字母大写;
- 拆、装箱:Integer i = new Integer(1);创建一个以对象形式存在的整数1,这种从基本类型转为引用类型的过程称之为“装箱”,反之叫“拆箱”;
- 装箱:
- 方式一:Double d = new Double(1.2);//装箱
- 方式二:Double d = Double.valueOf(1.2);//基本类型都有一个valueOf方法;
- 拆箱:double num = d.doubleValue();//拆箱
- 包装类的一些常用功能,将字符串转换为其类型,方法是:parseXXX,XXX代表其类型,但是一定要保证待转换的字符串描述的却是是或者兼容要转换的类型,否则会抛出异常;
BigDecimal类
表示精度更高的浮点型,在java.math.BigDecimal包下,该类可以进行更高精度的浮点运算,BigDecimal可以描述比Double还要高的精度,所以在转换为基本类型时,可能会丢失精度;
- BigDecimal的使用:创建一个BigDecimal实例,可以使用构造方法BigDecimal(String numberFormatString) 用字符串描述一个浮点数作为参数传入;
- BigDecimal可以做加(add)、减(subtract)、乘(multiply)、除(divide)等运算,需要注意的是除法,由于除法存在结果为无限不循环小数,所以对于除法而言,我们要指定取舍模式,否则会一直计算下去,直到报错(内存溢出);
BigDecimal num1 = new BigDecimal("3.0");
BigDecimal num2 = new BigDecimal("2.9");
BigDecimal result = num1.subtract(num2);//num1-num2
float f = result.floatValue();//将输出结果转换为基本类型float
result = num1.divide(num2,8,BigDecimal.ROUND_HALF_UP);//保留小数点后8位,四舍五入;
腰酸背疼腿抽筋啊!!!!!!!!!