一,String练习
–1,测试
package cn.tedu.api;
import java.util.Arrays;
//测试 String工具类
public class Test6 {
public static void main(String[] args) {
//1,创建对象
String s = new String();//触发无参构造
char[] value = {'h','e','l','l','o'} ;
String s2 = new String(value);//存在堆内存,低效
String s3 = "jack" ;//简写,存在常量池,高效
s3 = "rose" ;//创建新的字符串
//2,调用方法
// char charAt(int index)
char a = s2.charAt(0);//根据下标0获取对应的字符h
System.out.println(a);
// String concat(String str)
String b = s2.concat("123");//拼接字符串
System.out.println(b);//hello123
// boolean endsWith(String suffix)
boolean c = s2.endsWith("lo");//判断s2是否以"lo"结尾
System.out.println(c);//true
//TODO 调用以下方法
System.out.println( s2.contains("o") );//判断s2是否包含"o"
System.out.println( s2.endsWith("o") );//判断s2是以"o"结尾
System.out.println( s2.equals("hello") );//String重写了equals()
System.out.println( s2.hashCode() );//获取s2在内存中的哈希码值
System.out.println( s2.indexOf("l") );//获取s2里"l"第一次出现的索引
System.out.println( s2.lastIndexOf("l") );//获取s2里"l"最后一次出现的索引
System.out.println( s2.isEmpty() );//判断s2是否为空
System.out.println( s2.length() );//获取s2的长度
System.out.println( s2.replace('l','a') );//把旧字符换成新字符
System.out.println( s2.startsWith("he") );//判断是否以"he"开始
System.out.println( s2.substring(2) );//从2索引开始截取子串
System.out.println( s2.substring(1,3) );//从1索引开始,到3结束截取子串[1,3)-含头不含尾
System.out.println( s2.toLowerCase() );//全转小写
System.out.println( s2.toUpperCase() );//全转大写
s2=" a v c ";
System.out.println( s2.trim() );//去掉多余空格
System.out.println( s2.matches("abc") );//判断是否匹配
String x = String.valueOf(100);//把其他类型转成String类型
System.out.println(x+1);//1001
byte[] bs = s2.getBytes();//把每个字符对应的数字,存入 byte[]
//[32, 32, 97, 32, 118, 32, 99, 32]
System.out.println(Arrays.toString(bs));
s2="ab1c1d1";
String[] ss = s2.split("1");//按照规则切割字符串
System.out.println(Arrays.toString(ss));//[ab, c, d]
char[] cs = s2.toCharArray();//把字符串里的每个字符存入char[]
System.out.println(Arrays.toString(cs));//[a, b, 1, c, 1, d, 1]
//TODO String练习:获取指定字符串里的每个字符
String m="abcdefghijklmn";
//方式1:变成char[],再遍历char[]
char[] n = m.toCharArray();
for (int i = 0; i < n.length; i++) {
System.out.println(n[i]);
}
//方式2:变成byte[],再遍历byte[]
byte[] m2 = m.getBytes();
for (int i = 0; i < m2.length; i++) {
byte data = m2[i];
char n2 = (char)data;//强转,把byte->char
System.out.println(n2);
}
//方式3:直接遍历字符串,获取里面的字符
for (int i = 0; i < m.length(); i++) {
char data = m.charAt(i);//根据下标i,获取字符
System.out.println(data);
}
}
}
二,StringBuilder/StringBuffer
–1,概述
专门用来解决 字符串拼接的
–2,创建对象
StringBuilder() – 无参构造
StringBuilder append(String str) – 拼接方法
–3,测试
package cn.tedu.api;
//测试 StringBuilder/StringBuffer
public class Test1 {
public static void main(String[] args) {
// method();//用+拼接
method2();//用StringBuilder拼接
}
//用StringBuilder拼接
public static void method2() {
String s = “abcdefghi” ;
//1,创建对象
StringBuilder sb = new StringBuilder();//无参构造
long start = System.currentTimeMillis();//计时开始ms
for (int i = 0; i < 100000 ; i++) {
//2,用工具拼
sb.append(s);
}
long end = System.currentTimeMillis();//计时结束ms
System.out.println(end-start);//时间差4ms
}
//用+拼接—打印指定字符串拼接10000次的结果
public static void method() {
String s = “abcdefghi” ;
String res = “”; //定义变量,存结果
long start = System.currentTimeMillis();//计时开始ms
for (int i = 0; i < 100000 ; i++) {
res = res + s ;//拼接+
}
long end = System.currentTimeMillis();//计时结束ms
System.out.println(end-start);//时间差33849ms
}
}
三,日期工具类Date
–1,概述
类 Date 表示特定的瞬间,精确到毫秒。
–2,创建对象
Date()
–3,测试
package cn.tedu.api;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//测试 Date工具类
//总结:
//1,Date–用来获取时间的年月日 时分秒 毫秒
//2,SimpleDateFormat–用来把String类型的日期 和 Date 类型的日期 互转
//3,规定日期的模式:yyyy-MM-dd
public class Test2 {
public static void main(String[] args) throws Exception {
// method();//Date
method2();//String->Date SimpleDateFormat
}
//算存活天数
public static void method2() throws Exception {
//1,输入的出生日期
String data = new Scanner(System.in).nextLine();
//2,开始算天数
//2.1,创建对象 – SimpleDateFormat(String pattern)
SimpleDateFormat sdf =
new SimpleDateFormat(“yyyy-MM-dd”);
//2.2,Date parse(String text)
Date birthday = sdf.parse(data);//String -> Date
//2.3,算
long start = birthday.getTime();//获取出生时的ms
long now = System.currentTimeMillis();//获取当前时间的ms
System.out.println( (now-start)/1000/60/60/24 );//ms->天
}
//Date
public static void method() {
//1,创建对象 --Date()
Date d = new Date();
//2,调用方法
System.out.println(d.getDate());//今天是几号
System.out.println(d.getDay());//今天礼拜几
System.out.println(d.getHours());//现在几时
System.out.println(d.getMinutes());//现在几分
System.out.println(d.getMonth()+1);//现在几月 0~11
System.out.println(d.getSeconds());//现在几秒
System.out.println(d.getTime());//自1970.1.1零点
System.out.println(d.getYear()+1900);//自1900年算
System.out.println(d.toLocaleString());//2021-4-15 14:50:35
}
}
四,BigDecimal/BigInteger
–1,概述
BigDecimal – 专门解决小数运算不精确的问题
BigInteger – 专门解决超大的整数运算
–2,创建对象
BigDecimal(double val)
BigDecimal(String val)
–3,常用方法
加法:BigDecimal add(BigDecimal augend)
减法:BigDecimal subtract(BigDecimal subtrahend)
乘法:BigDecimal multiply(BigDecimal multiplicand)
除法:BigDecimal divide(BigDecimal divisor)
–4,测试
package cn.tedu.api;
import java.math.BigDecimal;
import java.util.Scanner;
//测试 BigDecimal工具类
public class Test3 {
public static void main(String[] args) {
// method();//+-*/
method2();//使用工具
}
public static void method2() {
double a = new Scanner(System.in).nextDouble();
double b = new Scanner(System.in).nextDouble();
//1,创建对象-BigDecimal
// 方式1:BigDecimal(double val) -- 有坑!!!
// BigDecimal bd1 = new BigDecimal(a);
// BigDecimal bd2 = new BigDecimal(b);
// 方式2:BigDecimal(String val) -- 推荐!!!
//需要把参数,从double->String --- String.valueOf()--- +""
BigDecimal bd1 = new BigDecimal(String.valueOf(a));
BigDecimal bd2 = new BigDecimal(b+"");
//2,调用方法
BigDecimal bd3 = bd1.add(bd2);//加法
System.out.println(bd3);
bd3 = bd1.subtract(bd2);//减法
System.out.println(bd3);
bd3 = bd1.multiply(bd2);//乘法
System.out.println(bd3);
//除不尽会抛出异常:java.lang.ArithmeticException
// bd3 = bd1.divide(bd2);//除法
//精确divide(1,2,3)-1是要除谁2是小数位数3是舍入模式
bd3 = bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);//除法
System.out.println(bd3);
}
// +-*/
public static void method() {
//接受用户输入的两个小数
double a = new Scanner(System.in).nextDouble();
double b = new Scanner(System.in).nextDouble();
//做运算
System.out.println(a+b);//不精确
System.out.println(a-b);//不精确
System.out.println(a*b);//不精确
System.out.println(a/b);//不精确
}
}
五,包装类
–1,概述
包装类 就是为 基本类型 提供丰富的方法
基本类型:byte short int long float double char boolean
包装类型:Byte Short Integer Long Float Double Character Boolean
Byte Short Integer Long Float Double父类是Number
–2,Number:
用来把包装类型 变回成 基本类型的各种方法/intValue()/byteValue()…
–3,Integer
–创建对象:Integer(int value)
–调用方法:intValue()/parseInt(String s)/valueOf(int i)
–4,测试
package cn.tedu.api;
//测试 包装类
public class Test4 {
public static void main(String[] args) {
//1,创建对象 – 把基本类型 变成 包装类型
Integer i = new Integer(5);
Integer c = Integer.valueOf(5);
System.out.println(c);
//2,调用方法
int a = i.intValue();//把包装类型 变成 基本类型
System.out.println(a);
//static int parseInt(String s)
int b = Integer.parseInt("5");//把字符串 转成 基本类型
System.out.println(b);
}
}