核心类库D2:String类的常用方法、StringBuilder类和StringBuffer类、日期相关的类
1.String类型(重中之重)
1.1 基本概念
- java.lang.String类用于描述字符串内容,Java程序中所有的字符串字面值都可以作为此类的实例加以描述,如:”abc”等。
- 该类由final关键字修饰表示不能被继承。
- 该类描述的字符串内容是个常量不可以更改,因此可以被共享。
如: String str1 = "abc"; str1 = "123"; //改变str1的指向而不是指向的内容。
- 常量池(原理)
出于性能的考虑,Java虚拟机会将每次出现的字符串字面值放入常量池中,若下次出现了重复的字符串时,直接使用池中已有的对象而不再需要创建新的对象。
1.2 常用的方法(练熟、记住)
- charAt(int i):获取下标为i的字符,返回char字符
- length():获取字符串的长度
- boolean contains(CharSequences):用于判断当前字符串是否包含参数指定的内容
- String toLowerCase():返回字符串的小写形式
- String toUpperCase():返回字符串的大写形式
- String trim():返回去掉前导和后继空白的字符串
- boolean startsWith(String prefix):判断字符串是否以参数字符串开头
- boolean endsWith(String suffix):判断字符串是否以参数字符串结尾
- str.indexOf():从指定字符串查找第一次遇到的字符串返回下标
- str.substring(5,10):表示从下标5(包括)取到10(不包括)并返回
1.3 注意
""
表示有字符串对象,但是里面没有内容,null
表示连字符串对象都没有- ‘a’97; ‘A’65; ‘0’48; ‘\n’10; ‘ ‘32
- 字符数组和字符串的区别
- 练习:分别使用两种方式将字符串”12345”转换成整数12345
- 方式一:调用Integer类中的parseInt方法
- 方式二:利用ASCII来实现字符串向整数的转换’1’-‘0’=1
- 练习:整数转成字符串
- 方式一:valueOf()方法
- 方式二:String str = “” + res; //推荐
- 接口类型的应用方法的形参,那么实参应该传递这个接口传递类的对象
- Java中所有字符串常量值都可以用String类加以描述
1.4 面试题
-
面试题:使用两种方法实现将字符串”12345”转换为整数12345并打印
方式一:使用Interger类中的parseInt方法进行转换即可 String str2 = new String("12345"); int ia = Interger.parseInt(str2); 方式二:取出字符串中的每个字符并转换为整数数据再合并起来 '1'-48 => 1 '2'-48 =>2 '1'-'0'=>1 '2'-'0' =>2 '3'-'0'=>3 int res = 0; for (int i = 0; i<str2.length() ;i++){ res = res*10 + (str2.charAt(i)-'0'); }
2.StringBuilder类和StringBuffer类(重点)
2.1 基本概念
- 由于String类型描述的字符串内容是个常量不可更改,当程序中出现大量类似的字符串时都需要单独存储,从而造成内存空间的浪费。
- 为了解决上述问题,可以使用StringBuilder类取代String类来描述字符串内容,该类型描述的字符串内容是可以改变的。
- 其中StringBuffer类是从jdk1.0开始存在,支持线程安全,因此访问效率比较低;
- 其中StringBuilder类是从jdk1.5开始存在,不支持线程安全,因此访问效率比较高;(常用)
2.2 常用的方法
-
public StringBuffer append(String s)
将指定的字符串追加到此字符序列。 -
public StringBuffer reverse()
将此字符序列用其反转形式取代。 -
public delete(int start, int end)
移除此序列的子字符串中的字符。 -
public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。 -
replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
2.3 String和StringBuilder类型的转换
-
父子类之间才能强转,String和StringBuilder是平行关系,不能强转
-
StringBuilder类型向String类型的转换:toString方法
String str1 = sb1.toString();
-
String类型向StringBuilder类型的转换:StringBuilder类的构造方法
StringBuilder sb2 = new StringBuilder(str1);
2.4 注意
- length()长度,实际装多少
- capacity()容量,能装多少
- 当字符串对象中的字符超过初始容量时,该对象会自动扩容
- StringBuilder()可以连续调用
3.日期相关的类(会用即可)
3.1 Date类(java.util包)
-
基本概念
java.util.Date类主要用于描述特定的瞬间,可以精确到毫秒。 -
常用的方法
Date() - 根据当前系统时间来构造对象。
Date(long date) - 根据参数指定的毫秒数构造对象,为距离标准时间的毫秒数。
long getTime() - 获取调用对象表示的时间距离标准时间的毫秒数。
void setTime(long time) - 用于设置调用对象表示的时间为距离标准时间,参数指定毫秒数的时间点。
3.2 SimpleDateFormat类(java.text包)
-
基本概念
java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换。 -
常用的方法
SimpleDateFormat(String pattern) - 根据参数指定的字符串模式构造对象。
y代表年 M代表月 d代表日 H代表时 m代表分 s代表秒
String format(Date date) - 用于实现日期类型向文本类型的转换。
Date parse(String source) - 用于实现文本到日期的转换。
3.3 Calendar类(java.util包)
-
基本概念
java.util.Calendar类主要用于取代Date类描述特定的瞬间。 -
常用的方法
调用静态方法得到Calendar类型的引用:Calendar c1 = Calendar.getInstance();
调用set方法设置年月日时分秒:c1.set(2008,8-1,8,20,8,8);
调用getTime方法将Calendar类型转换为Date类型:Date d2 = c1.getTime();
调整格式并打印format(d2) -
Calendar类不能new对象,但是Calendar类的引用可以指向子类的对象(多态的第三种使用场合)
作业:
- 重点掌握String类相关的代码。
- 编程统计字符串”ABCD123!@#$%ab”中大写字母、小写字母、数字、其它字符的个数并打印出来
当我们要记录单个内容时声明一个变量就行了
当我们要记录多个内容时声明一个一维数组 - 首先输入学生人数,循环输入班级的学生信息,然后放入Student数组中,并打印所有姓zhang的学生信息。
要求姓名用拼音(不要用汉字),学生所有信息用String格式输入,中间用逗号隔开。
其中学生信息有:学号、姓名以及年龄。
提示:需要查询String类中的split()方法进行字符串拆分,实参传递逗号(“,”)即可。
Student[] arr = new Student[10];
- 使用StringBuilder类将字符串”ABCD”转换为”A,B,C,D”并打印出来。
将字符串中的每个字符取出来,然后使用逗号进行拼接,判断当取出最后一个字符时不要追加逗号
sb2.append(sb1.charAt(i)).append(",");