String类
String表示字符串,属于引用数据类型,
例如String a = "asdfasdf"这样的"asdfasdf"字符串,存放在方法区的字符串常量池当中
常用构造方法
String(byte[])
byte[] bytes = {97, 98, 99};
String s2 = new String(bytes);
System.out.println(s2);
/*输出结果:abc*/
String(byte[], int, int)
byte[] bytes = {97, 98, 99};
String s2 = new String(bytes,1, 2);
System.out.println(s2);
/*输出结果是:bc*/
String(char[])
char[] chars = {'我', '是', '中', '国', '人'};
String s2 = new String(chars);
System.out.println(s2);
/*输出结果:我是中国人*/
String(char[], int, int)
char[] chars = {'我', '是', '中', '国', '人'};
String s2 = new String(chars, 2, 3);
System.out.println(s2);
/*输出结果:中国人*/
常用方法
charAt(int)
索取字符串的指定下标,并返回该字符
char c = "中国人".charAt(1);
System.out.println(c);
/*输出结果:国*/
compareTo(String)
比较两个字符串是否相等,相等返回0,前小后大返回负数,前大后小返回正数
int result = "abc".compareTo("weg");
System.out.println(result);
/*结果是:-22*/
contains(CharSequence)
前面的字符串是否包含后面的字符串
boolean result = "abcasdfasdf".contains("abc");
System.out.println(result);
/*结果是:true*/
endsWith(String)
判断当前字符串是否以某个字符串结尾
boolean result = "abcasdfasdf.txt".endsWith("abc.java");
System.out.println(result);
/*结果是:false*/
equalsIgnoreCase(String)
判断两个字符串是否相等并且忽略大小写
boolean result = "abc".equalsIgnoreCase("ABC");
System.out.println(result);
/*输出结果是:true*/
getBytes()
将字符串对象转换成字节数组
byte[] bytes = "asdfa".getBytes();
for (byte aByte : bytes) {
System.out.println(aByte);
}
/*输出结果是:
97
115
100
102
97*/
indexOf(String)
判断某个子字符串在当前字符串中第一次出现处的索引(下标),没找到就返回-1
System.out.println("akl;sjdfiaousdgbhajskldhg".indexOf("bha"));
/*输出结果是:15*/
isEmpty()
判断字符串是否为空
String s = "";
System.out.println(s.isEmpty());
/*输出结果是:true*/
length()
判断数组长度是length属性,判断字符串长度是length()方法。
System.out.println("asd".length());
/*输出结果是:3*/
replace(CharSequence,CharSequence)
CharSequence是String的父接口
String newString = "http://www.baidu.com".replace("http://","https://");
System.out.println(newString);
/*输出结果是:https://www.baidu.com*/
split(String)
拆分字符串
String[] newString = "1970-06-23".split("-");
System.out.println(Arrays.toString(newString));
/*输出结果是:[1970, 06, 23]*/
startsWith(String)
判断某个字符串是否以某个子字符串开始
System.out.println("1970-06-23".startsWith("1970"));
/*输出结果是:true*/
substring(int,int)
截取字符串,左闭右开
String string = "我是中国人".substring(2,5);
System.out.println(string);
/*输出结果是:中国人*/
toCharArray()
char[] newchar = "我是中国人".toCharArray();
System.out.println(Arrays.toString(newchar));
/*输出结果是:[我, 是, 中, 国, 人]*/
toLowerCase()
转换为小写
String newstring = "ASDPOH".toLowerCase();
System.out.println(newstring);
/*输出结果是:asdpoh*/
trim()
去除字符串前后空白
String newstring = " ASDPOH ".trim();
System.out.println(newstring);
/*输出结果是:asdpoh*/
valueOf()
将非字符串转换成字符串
String s1 = String.valueOf(12456);
System.out.println(s1);
/*输出结果是:12456*/
StringBuffer类
如果频繁的字符串拼接,会有什么问题
因为java中的字符串是不可变的,所每次拼接都会产生新字符串,这样会占用大量的方法区空间浪费
作用:Stringbuffer就是用来解决频繁使用字符串拼接的问题
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("1970-");
stringBuffer.append("12-");
stringBuffer.append(15);
System.out.println(stringBuffer);
/*输出结果:1970-12-15*/
优化StringBuffer的性能
在创建StringBuffer的时候尽可能给定一个初始化容量
最好减少底层数组的扩容次数。预估一下,给一个大一些的容量
//指定初始化容量的StringBuff对象(字符串缓冲区对象)
StringBuffer sb = new StringBuffer(100);
stringBuffer.append("1970-");
stringBuffer.append("12-");
stringBuffer.append(15);
System.out.println(stringBuffer);
/*输出结果:1970-12-15*/
StringBuilder和StringBuffer的区别
StringBuffer中的方法都有:synchronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的
StringBuilder中方法没有:synchronized关键字修饰。表示StringBuilder在多线程环境下运行是不安全的
八个包装类
基本数据类型 | 包装数据类型 | 父类 |
---|---|---|
byte | Byte | Number |
short | Short | Number |
int | Integer | Number |
long | Long | Number |
float | Float | Number |
double | Double | Number |
boolean | Boolean | Object |
char | Character | Object |
为何使用包装类
开发中可能会遇到传入方法的参数要求是一个对象级别的数据,而8种基本数据类型不是对象级别的数据,无法当做参数传入
此时,SUN公司就为我们准备了8种数据类型的8个包装类,可以把8种基本数据类型转换成为对象级别的数据。
使用包装类
装箱
基本数据类型 ——(转换为)——>引用数据类型
Integer i = new Integer(100);//JDK9之后就已经过时,不推荐这样写
自动装箱
Integer i = 100;
拆箱
引用数据类型——(转换为)——>基本数据类型 (可以拆成多种类型)
float f = i.floatValue();
自动拆箱
int y = x;
获取包装类的最大最小值
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
/*输出结果是:
2147483647
-2147483648
*/
String,int ,Integer相互转换
日期类
获取系统当前时间
Date类;
Date nowtime = new Date();
System.out.println(nowtime);
/*输出结果是:Sat May 22 22:55:37 CST 2021*/
格式化日期
SimpleDateFormat类,使用format()方法
yyyy:年
MM:月
dd;日
HH:小时
mm:分
ss:秒
SSS:毫秒
Date nowtime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.format(nowtime));
/*输出结果是:2021-05-22 23:03:54 510*/
String类型换成Date类型
使用parse()方法
String nowtime = "2021-05-22 23:03:54 510";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.parse(nowtime));
/*输出结果是:Sat May 22 23:03:54 CST 2021*/
数字类
数字格式化
DecimalFormat类负责数字格式化
#代表任意数字
,代表千分位
.代表小数点
0代表不够时补0,一般用于保留几位小数
//表示:加入千分位,保留两位小数
DecimalFormat df = new DecimalFormat("###,###.##");
String s = df.format(12363541156.6556);
System.out.println(s);
/*输出结果是:12,363,541,156.66*/
大数据
BigDecimal,精度极高,专门使用在财务软件中
BigDecimal b1 = new BigDecimal(100);
BigDecimal b2 = new BigDecimal(200);
BigDecimal b3 = b1.add(b2);
System.out.println(b3);
/*输出结果是:300*/
随机数
Random类
产生任意范围内的随机数
Random r1 = new Random();
int num1 = r1.nextInt();
System.out.println(num1);
/*输出结果是(一个随机数,每一次执行代码都会得到一个不一样的值):836899164*/
产生指定范围内的随机数
//产生[0~99]之间的随机数
Random r1 = new Random();
int num1 = r1.nextInt(100);
System.out.println(num1);
/*输出结果是(0~99之间的随机数):70*/
枚举
类似于C语言中的枚举类型
public class Hello{
public class void main(String[] args){
System.out.println(Fruit.APPLE);
}
}
enum Fruit{
APPLE,BANANA,ORANGE
}
/*输出结果是:APPLE*/
`