曹阳的博客 仅用于学习和分享

Java核心类库2

2019-10-30

核心类库D2:String类的常用方法、StringBuilder类和StringBuffer类、日期相关的类

1.String类型(重中之重)

1.1 基本概念

  1. java.lang.String类用于描述字符串内容,Java程序中所有的字符串字面值都可以作为此类的实例加以描述,如:”abc”等。
  2. 该类由final关键字修饰表示不能被继承。
  3. 该类描述的字符串内容是个常量不可以更改,因此可以被共享。
      
    String str1 = "abc";  
    str1 = "123";         //改变str1的指向而不是指向的内容。  
    
  4. 常量池(原理)
    出于性能的考虑,Java虚拟机会将每次出现的字符串字面值放入常量池中,若下次出现了重复的字符串时,直接使用池中已有的对象而不再需要创建新的对象。

1.2 常用的方法(练熟、记住)

  1. charAt(int i):获取下标为i的字符,返回char字符
  2. length():获取字符串的长度
  3. boolean contains(CharSequences):用于判断当前字符串是否包含参数指定的内容
  4. String toLowerCase():返回字符串的小写形式
  5. String toUpperCase():返回字符串的大写形式
  6. String trim():返回去掉前导和后继空白的字符串
  7. boolean startsWith(String prefix):判断字符串是否以参数字符串开头
  8. boolean endsWith(String suffix):判断字符串是否以参数字符串结尾
  9. str.indexOf():从指定字符串查找第一次遇到的字符串返回下标
  10. str.substring(5,10):表示从下标5(包括)取到10(不包括)并返回

1.3 注意

  1. ""表示有字符串对象,但是里面没有内容,null表示连字符串对象都没有
  2. ‘a’97; ‘A’65; ‘0’48; ‘\n’10; ‘ ‘32
  3. 字符数组和字符串的区别
  4. 练习:分别使用两种方式将字符串”12345”转换成整数12345
    • 方式一:调用Integer类中的parseInt方法
    • 方式二:利用ASCII来实现字符串向整数的转换’1’-‘0’=1
  5. 练习:整数转成字符串
    • 方式一:valueOf()方法
    • 方式二:String str = “” + res; //推荐
  6. 接口类型的应用方法的形参,那么实参应该传递这个接口传递类的对象
  7. Java中所有字符串常量值都可以用String类加以描述

1.4 面试题

  1. 面试题:使用两种方法实现将字符串”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 基本概念

  1. 由于String类型描述的字符串内容是个常量不可更改,当程序中出现大量类似的字符串时都需要单独存储,从而造成内存空间的浪费。
  2. 为了解决上述问题,可以使用StringBuilder类取代String类来描述字符串内容,该类型描述的字符串内容是可以改变的。
  3. 其中StringBuffer类是从jdk1.0开始存在,支持线程安全,因此访问效率比较低;
  4. 其中StringBuilder类是从jdk1.5开始存在,不支持线程安全,因此访问效率比较高;(常用)

2.2 常用的方法

  1. public StringBuffer append(String s)
    将指定的字符串追加到此字符序列。

  2. public StringBuffer reverse()
    将此字符序列用其反转形式取代。

  3. public delete(int start, int end)
    移除此序列的子字符串中的字符。

  4. public insert(int offset, int i)
    将 int 参数的字符串表示形式插入此序列中。

  5. replace(int start, int end, String str)
    使用给定 String 中的字符替换此序列的子字符串中的字符。

2.3 String和StringBuilder类型的转换

  1. 父子类之间才能强转,String和StringBuilder是平行关系,不能强转

  2. StringBuilder类型向String类型的转换:toString方法 String str1 = sb1.toString();

  3. String类型向StringBuilder类型的转换:StringBuilder类的构造方法 StringBuilder sb2 = new StringBuilder(str1);

2.4 注意

  1. length()长度,实际装多少
  2. capacity()容量,能装多少
  3. 当字符串对象中的字符超过初始容量时,该对象会自动扩容
  4. StringBuilder()可以连续调用

3.日期相关的类(会用即可)

3.1 Date类(java.util包)

  1. 基本概念
    java.util.Date类主要用于描述特定的瞬间,可以精确到毫秒。

  2. 常用的方法
    Date() - 根据当前系统时间来构造对象。
    Date(long date) - 根据参数指定的毫秒数构造对象,为距离标准时间的毫秒数。
    long getTime() - 获取调用对象表示的时间距离标准时间的毫秒数。
    void setTime(long time) - 用于设置调用对象表示的时间为距离标准时间,参数指定毫秒数的时间点。

3.2 SimpleDateFormat类(java.text包)

  1. 基本概念
    java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换。

  2. 常用的方法
    SimpleDateFormat(String pattern) - 根据参数指定的字符串模式构造对象。
    y代表年 M代表月 d代表日 H代表时 m代表分 s代表秒
    String format(Date date) - 用于实现日期类型向文本类型的转换。
    Date parse(String source) - 用于实现文本到日期的转换。

3.3 Calendar类(java.util包)

  1. 基本概念
    java.util.Calendar类主要用于取代Date类描述特定的瞬间。

  2. 常用的方法
    调用静态方法得到Calendar类型的引用:Calendar c1 = Calendar.getInstance();
    调用set方法设置年月日时分秒:c1.set(2008,8-1,8,20,8,8);
    调用getTime方法将Calendar类型转换为Date类型:Date d2 = c1.getTime();
    调整格式并打印format(d2)

  3. Calendar类不能new对象,但是Calendar类的引用可以指向子类的对象(多态的第三种使用场合)

作业:

  1. 重点掌握String类相关的代码。
  2. 编程统计字符串”ABCD123!@#$%ab”中大写字母、小写字母、数字、其它字符的个数并打印出来
    当我们要记录单个内容时声明一个变量就行了
    当我们要记录多个内容时声明一个一维数组
  3. 首先输入学生人数,循环输入班级的学生信息,然后放入Student数组中,并打印所有姓zhang的学生信息。
    要求姓名用拼音(不要用汉字),学生所有信息用String格式输入,中间用逗号隔开。
    其中学生信息有:学号、姓名以及年龄。
    提示:需要查询String类中的split()方法进行字符串拆分,实参传递逗号(“,”)即可。
    Student[] arr = new Student[10];
  4. 使用StringBuilder类将字符串”ABCD”转换为”A,B,C,D”并打印出来。
    将字符串中的每个字符取出来,然后使用逗号进行拼接,判断当取出最后一个字符时不要追加逗号
    sb2.append(sb1.charAt(i)).append(",");

上一篇 Java核心类库1

下一篇 Java集合

Content