如何创建字符串对象
方式一:通过赋值创建
String name = "张三";
方式二:通过构造方法创建
常用构造方法 | 作用 |
String() | 创建一个空白字符串对象 |
String(String str) | 创建一个指定字符串的字符串对象 |
String(char[] list) | 创建一个指定数组的字符串对象 |
String(byte[] byte,String charsetName) | 按指定的编码格式创建一个指定字节数组的字符串对象 |
字符串String类中的常用方法
方法名 | 返回值 | 作用 |
length() | int | 得到字符串的长度 |
toLowerCase() | String | 将字符串转换为小写 |
toUpperCase() | String | 将字符串转换成大写 |
trim() | String | 去除字符串首尾的所有空格 |
isEmpty() | boolean | 判断字符串是否为空白字符串 |
getBytes() | byte[] | 将字符串转换成字节数组 |
toCharArray() | char[] | 将字符串装换成字符数组 |
equalslgnoreCass(String) | boolean | 忽略大小写,判断两个字符是否相等 |
charAt(int index) | char | 得到字符串指定索引上的字符 |
equals(String str) | boolean | 判断两个字符是否相同 |
IndexOf(String str) | int | 得到子字符串第一次出现的索引位置,不存在则返回-1 |
lastIndexOf(String str) | int | 得到子字符串最后一次出现的索引位置,不存在则返回-1 |
contains(字符序列) | boolean | 判断某个子字符串是否在原字符串中出现 |
concatenate(String str) | String | 将参数字符串拼接到原字符串末尾 |
startWith() | boolean | 判断字符串是否以指定字符串开头 |
endWith() | boolean | 判断字符串是否以指定字符串结尾 |
substring(int begin) | String | 从指定索引开始截取字符串至末尾 |
substring(int begin,int end) | String | 截取[begin,end)区间内的字符串 |
split(String regex) | String[] | 按执行字符串或正则表达式切分原字符串,如果指定内容不在末尾,n个指定字符能得到n+1个子串;如果指定内容在末尾,n个指定字符嫩得到n个字串(不包含末尾的无效字符) |
replace(char oldChar,char newChar) | String | 将原字符串中的所有指定字符替换成新的字符 |
String.valueOf(参数) | String | 将任意参数转换成字符串,通常用于原始类型转换成字符串 |
String.ormat(String 格式,Object... obj) | String | 根据指定格式转换参数,常用于将浮点数保留小数。如:String.fformat("%4.2",10.0/3);表示将计算的结果四舍五入保留2位小数转换为字符串;如果最终数据所占位置小于4,原样输出,大于4在最前面补空格。 |
可变字符串
String字符串对象是一个常量,定义后值不能改变,如果要频繁的进行更新,就会不停的创建新的对象,执行效率低,所以可以使用可变字符串。
StringBuilder类
非线程安全,建议在单线程环境下使用
StringBuffer类
线程安全,建议在多线程环境下使用
StringBuilder类和StringBuffer类中的方法一致,下面以StringBuilder类为例
构造方法
构造方法 | 作用 |
StringBuilder() | 创建一个大小为16的字符串数组,表示一个空白字符。类似于String str=""; |
StringBuilder(String str) | 创建一个str长度+16的字符数组后,将str添加到其中。类似于String str = "初始值" |
常用方法
常用方法名 | 作用 |
append(Object obj) | 将任意类型的参数添加到原可变字符串末尾 |
delect(int a,int b) | 将区间[a,b)的内容进行删除 |
delectCharAt(int index) | 将指定索引位置的元素进行删除 |
insert(int index,Object obj) | 在索引index上插入obj |
replace(int start,int end,String str) | 将[start,end)区间内的字符替换成str |
reverse() | 反转字符串 |
注意:
1、上述表格中的方法都是直接操作在同一个字符串对象,每次调用方法后,原字符串都会发生变化
2、StringBuffer和StringBuilder并没有重写equals方法,所以可变字符串的值是否相同时,调用的是equals中原始的==判断。如果要判断两个可变字符串的值是否相同时,需要将其转换为String后调用equals判断
可变字符串和字符串之间的转换
字符串String转换成可变字符串StringBuilder
通过构造方法将String类型包装为可变字符串对象
String str = "张三";
StringBuilder sb = new StringBuilder(str);
可变字符串StringBuilder转换成字符串String
方法一:String.valueOf(Object obj)方法
方法二:任何数据都可通过toString()方法转换成字符串
方法三:拼接空字符串
StringBulider sb = new StringBuilder("你好");
String str = String.valueOf(sb);//方法一
String str2 = sb.toString();//方法二
String str3 = sb+" ";//方法三
面试题:比较String、StringBuilder、StringBuffer的区别
相同点:
1、都表示字符串、操作字符串,都提供了一些操作字符串的方法
2、有公共的方法,如charAt(),indexOf()等
3、都是被关键字final修饰的类,不能够被继承
不同点:
1、String定义的字符串是一个常量,可变字符串定义的字符串是一个变量
2、String类中的方法调用后不会改变原本字符串的值,可变字符串调用方法后会改变原字符串的值
3、StringBuilder是非线程安全的可变字符串类,适用于单线程,StringBufffer是线程安全的可变字符串类,StringBuffer线程安全,因为类中的方法使用synchronized修饰,是一个同步方法,适用于多线程。
字符串和可变字符串的总结:
在频繁操作同一个字符串时,String的执行效率低,一定要使用可变字符串StringBuilder或者StringBuffer类的对象,不能使用String类的对象,频繁操作使用StringBuffer可变字符串类
System类
该类中的属性和方法都是静态的,直接通过类名访问,该类不能够创建对象,不是因为他是抽象类,而是因为他的构造方法是私有的。
常用方法
常用属性和方法 | 作用 |
---|---|
System.out | 获取系统打印输出流PrintStream对象,用于控制台打印信息 |
System.in | 获取输入流InputStream对象,用于获取输入的信息 |
System.err | 获取系统打印输出流PrintStream对象,用于控制台打印异常信息 |
System.exit(int statues) | 终止虚拟机运行,参数0表示正常终止(退出) |
System.currentTimemilles() | 计算1970年1月1日零时零分零秒到现在时间的毫秒数,中国是UTC(+8),所以是从1970年1月1日八时零分零秒到现在时间所经过的毫秒数,返回long类型 |
System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,原数组要复制的元素数量) | 将原数组中指定长度的元素复制到新数组中 |
Runtime类
Runtime类的对象表示程序运行时对象,包换了程序运行环境相关的信息,常用于获取运行环境信息或执行某个命令。
特点
该类不是一个抽象类 ,它的构造方法是私有的,所以不能够创建对象
提供了一个静态方法getRuntime(),通过Runtime.getRuntime()可以获取一个Runtime类的对象
Date类
Date类 是一个日期类,表示日期时间的类,位于java.util包下
构造方法
常用构造方法 | 说明 |
---|---|
Date() | 创建当前瞬间对应的日期对象 |
Date(long l) | 创建指定瞬间对应的日期对象 |
Date(int year, int month, int day) | 该构造方法已过时。创建指定年月日的日期对象(年是1900年起经过的年数,月用0-11表示1到12月) |
常用方法
常用方法 | 作用 |
getTime() | 得到对应Date对象表示的毫秒数 |
setTime(long l) | 设置Date对象的毫秒数 |
after(Date when) | 判断调用日期对象是否在when之后 |
before(Date when) | 判断调用日期对象是否在when之前 |
SimpleDateFormat类
是一个用于格式化日期的类
构造方法
常用构造方法 | 作用 |
---|---|
SimpleDateFormat(String pqtten) | 创建一个日期模板的格式化日期对象 |
日期模板
特殊字符 | 作用 |
---|---|
yyyy | 年份 |
MM | 月份 |
dd | 日期 |
HH | 24小时制 |
hh | 12小时制 |
mm | 分钟 |
ss | 秒 |
E | 星期 |
以上两个字母都可以写成一个,如5月 | M:5 MM:05 |
yyyy/MM/dd HH:mm:ss E | 2020/11/01 23:13:30 |
常用方法
常用方法 | 返回值 | 作用 |
---|---|---|
format(Date date) | String | 将Date对象按日期模板转换成字符串 |
parse(String str) | Date | 将满足日期模板的字符串转换成Date对象 |
Calender类
是一个日历类,包含了很多日历相关的信息。该类是一个抽象类,不可以创建对象,可以通过Calendar.getInstance()获取该类的实例
该类中有许多倍fianl和static修饰的常量,实际是一个数字,用来获取指定信息
常量
值 | 作用 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份(0-11表示1-12月) |
Calendar.DATE | 日期 |
Calendar.DAY_OF_WEEK | 星期(1-7表示从周天到周六) |
Calendar.HOUR | 12进制小时 |
Calendar.HOUR_OF_DAY | 24进制小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 本周第几天 |
Calendar.DAY_OF_MONTH | 本月第几天 |
Calendar.DAY_OF_YEAR | 本年第几天 |
Calendar.WEEK_OF_MONTH | 本月第几周 |
Calendar.WEEK_OF_YEAR | 本年第几周 |
常用方法
常用方法 | 作用 |
---|---|
get(int filed) | 根据日历字段获取对应的值 |
getTime() | 获取对应的Date对象(Calendar对象转换成Date对象) |
getMaximum(int filed) | 获取指定日历字段支持的最大值,如Calendar.DATE最大为31 |
getActualMaximun(int filed) | 获取指定日历字段在当前日期下的实际最大值,如11月,Calendar.DATE最大为30 |
set(int filed,int value) | 将指定的日历字段设置为指定值 |
set(int year,int month,int date) | 同时设置日历对象的年月日 |
setTime(Date date) | 将Date对象作为参数设置日历对象的信息 |
包装类
包装类就是原始类型对应的类类型,包装类通常用于字符串和原始类型之间的转换
包装类 | 原始类型 |
---|---|
Byte | byte |
Short | short |
Integer | int |
Long | long |
loat | float |
Double | double |
Character | char |
Boolean | boolean |
特点
1、八个原始类型中,除了int和char之外,其余类型的包装类,都是将首字母改为大写,int对应Integer,char对应Character
2、包装类都是被final修饰的,不能被继承
3、除了Character类之外,其余包装类都有两个构造方法:参数为原始类型或者String的构造方法,Character的构造方法只有一个,参数为char类型.这些构造方法用于将原始类型或字符串转换成包装类对象
4、除了Character类,其余类都有静态方法parse原始类型(String str),用于将字符串装换成对应的原始类型
5、除了Boolean类,其余的包装类都有MAX_VALUE和MIN_VALUE这两个静态属性,用于获取对应类型支持的最大最小值
6、所有包装类都重写了toString()方法,用于将包装类对象转换为String对象
字符串与原始类型之间的转换
字符串转换成原始类型
使用包装类.parse原始类型(String str)
String str = "123";
//将String类型转换成int类型
int num = Integer.parseInt(str);
System.out.println(num);
//将String类型转换成double类型
double num2 = Double.parseDouble(str);
System.out.println(num2);
//将String类型转换成float类型
float num3 = Float.parseFloat(str);
System.out.println(num3);
//将String类型转换成byte类型
byte num4 = Byte.parseByte(str);
System.out.println(num4);
//将String类型转换成short类型
short num5 = Short.parseShort(str);