> 文章列表 > day16_API

day16_API

day16_API

今日内容

零、 复习昨日
一、作业
二、String
三、StringBuffer&StringBuilder
四、日期

零、 复习昨日

Object

  • equals
  • toString

包装类

  • 和String相互转换

Math&随机

一、String

  • Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现,也就是说程序出现的字符串"abc"都是String类的对象;
  • 字符串是常量,它们的值在创建之后不能更改。
  • String 类包括的方法可用于检查序列的单个字符比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
private static void show1() {String name = "张三";// name就是String类的对象// name所代表的"张三"在内存是常量name.toString();// 对象可以调用方法name = "李四";// 这样,只是name这个变量不再引用"张三",而是引用"李四"}

1.1 构造方法

提供了很多种构造方法,以供使用各种方式创建字符对象.


  • String() // 创建一个空字符,是"",不是null
  • String(byte[] bytes)
  • String(char[] chars)
  • String(String original)
   private static void show2() {// 无参构造String s = new String( );// String s2 = ""; // 于上方等价System.out.println(s );// 将字节数组,转为字符串byte[] bytes = {65,66,67};String s3 = new String(bytes);System.out.println(s3 );// 一般会用在数据传输(IO) 网络通信// 将字符数组转字符串char[] chars = {'a','b','c'};String s4 = new String(chars);System.out.println(s4 );// 创建一个字符串副本// String s5 = new String("java");// 总结: 最常见的创建字符串的方式String s6 = "java";}

1.2 方法[重点]

查找类的方法

  • char charAt(int index) 返回指定索引处的 char 值。
  • int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。其实有很多重载的方法,可以传字符串
  • int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。
private static void show3() {// - char charAt(int index) 返回指定索引处的 char 值。// 根据下标找字符char c = "java".charAt(0);System.out.println(c );// - int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。// 其实有很多重载的方法,可以传字符串// 找不到返回-1// 根据字符找下标// 场景: 可以用来判断是否包含int a = "java".indexOf('a');int a2 = "java".indexOf("cv");System.out.println(a2 );// - int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。System.out.println("java".lastIndexOf("a") );// 思考题: 找javaava中,第2个a,利用indexOf(String s,int fromIndex)方法}

判断类的方法

  • boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true
  • boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。
    • boolean startsWith(String prefix) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
  • boolean equals(Object anObject) 将此字符串与指定的对象比较。
    • boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
  • boolean isEmpty() 当且仅当 length() 为 0 时返回 true。
  private static void show4() {// - boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 trueSystem.out.println("java".contains("cv") );// - boolean endsWith(String suffix)  测试此字符串是否以指定的后缀结束。System.out.println("java".endsWith("a"));// 场景: 用来判断文件格式System.out.println("a.txt".endsWith("txt"));// - boolean startsWith(String prefix)  测试此字符串从指定索引开始的子字符串是否以指定前缀开始。System.out.println("a.txt".startsWith("a") );// - boolean equals(Object anObject)  将此字符串与指定的对象比较。String a = "a";String a2 = "a";System.out.println(a.equals(a2) );// - boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。System.out.println("JAVA".equals("java") );System.out.println("JAVA".equalsIgnoreCase("java") );// - boolean isEmpty()  当且仅当 length() 为 0 时返回 true。System.out.println("".isEmpty( ));System.out.println("java".isEmpty( ));}

转换类

  • byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
  • char[] toCharArray() 将此字符串转换为一个新的字符数组。
    • String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写
  • String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
    • static String valueOf(boolean b) 返回 boolean 参数的字符串表示形式。
private static void show6() {// - byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。byte[] bytes = "java".getBytes( );// - char[] toCharArray()  将此字符串转换为一个新的字符数组。char[] chars = "java".toCharArray( );// - String toLowerCase()  使用默认语言环境的规则将此 String 中的所有字符都转换为小写System.out.println("JAVA".toLowerCase() );// - String toUpperCase()  使用默认语言环境的规则将此 String 中的所有字符都转换为大写。System.out.println("java".toUpperCase() );// - static String valueOf(boolean b)// 返回 boolean 参数的字符串表示形式。// 提供了多个重载方法,可以将大部分类型都转换成String// 注意,该方法是静态的String.valueOf(new Object());}

字符截取

  • String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
  • String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。

字符替换

  • String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
  • String replaceAll(String regex, String replacement)
private static void show7() {// String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。String s = "java".substring(1);System.out.println(s );// String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。// endIndex 后面的下标不包含String s2 = "java".substring(1,3);// String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的System.out.println("jav,av,av,a".replace("av","AV") );// String replaceAll(String regex, String replacement)}

其他方法

  • String concat(String str) 将指定字符串连接到此字符串的结尾。
  • int length() 返回此字符串的长度。
  • String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
  • String trim() 返回字符串的副本,忽略前导空白和尾部空白。
    public static void main(String[] args) {// - String concat(String str) 将指定字符串连接到此字符串的结尾。System.out.println("java".concat("bigdata") );// - int length()  返回此字符串的长度。System.out.println("java".length() );// - String[] split(String regex)  根据给定正则表达式的匹配拆分此字符串。String[] split = "java".split("");System.out.println(Arrays.toString(split));String[] split1 = "j-a-v-a".split("-");System.out.println(Arrays.toString(split1));// .是正则表达式的运算符,需要转义成字符.String[] split2 = "java从入门到精通.doc".split("\\\\.");System.out.println(Arrays.toString(split2));// 题目: 获得文件的后缀// - String trim()  返回字符串的副本,忽略前导空白和尾部空白。System.out.println("     java     ".trim( ));}

常用的

char charAt(int index)
int indexOf(int ch)
boolean equals(Object anObject)
String substring(int beginIndex)
int length()
String[] split(String regex)

二、StringBuffer&StringBuilder

2.1 StringBuffer

StringBuffer是字符串缓冲区,一个线程安全的,字符的可变序列
该类提供了一些方法可以改变字符串的长度和内容.

构造方法

  • StringBuffer() 构造一个没有字符的字符串缓冲区,并构造了16个字符的初始容量。
  • StringBuffer(CharSequence seq) 构建一个包含指定的 CharSequence相同字符的字符串缓冲区。
  • StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区,并构造指定的初始容量。
  • StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。

ps: 场景将来通过构造方法用于和String之间来回转换

        // 以指定字符串创建StringBufferStringBuffer sb = new StringBuffer("java");System.out.println(sb );

方法

  • StringBuffer append(boolean b) 追加的 boolean参数序列的字符串表示形式
    ps: 有很多append的重载方法,用于追加大多数类型

  • StringBuffer delete(int start, int end) 删除的字符在字符串序列分析。

  • StringBuffer deleteCharAt(int index) 删除 char在指定的位置在这个序列。

  • StringBuffer insert(int offset, boolean b) 插入的 boolean参数的字符串表示形式进入这个序列。 ps: 参数2支持大部分类型

  • StringBuffer replace(int start, int end, String str) 在一个字符串中替换指定的 String字符这个序列的特征。

  • StringBuffer reverse() 使这个字符序列被序列的反转所取代。

  • void setCharAt(int index, char ch) 指定索引处的字符设置为 ch。

总结: 其实以上方法就是对字符串的CRUD…

    public static void main(String[] args) {// 以指定字符串创建StringBufferStringBuffer sb = new StringBuffer("java");System.out.println(sb );// - StringBuffer append(boolean b) 追加的 boolean参数序列的字符串表示形式// ps: 有很多append的重载方法,用于追加大多数类型StringBuffer sb2 = sb.append("bigdata");System.out.println(sb );System.out.println(sb2 );// javabigdata// - StringBuffer delete(int start, int end)  删除的字符在字符串序列分析。sb.delete(4,7);System.out.println(sb );// javadata// - StringBuffer deleteCharAt(int index)    删除 char在指定的位置在这个序列。sb.deleteCharAt(4);System.out.println(sb );// javaata// - StringBuffer insert(int offset, boolean b) 插入的 boolean参数的字符串表示形式进入这个序列。 ps: 参数2支持大部分类型// ps: insert方法有10+多个重载的方法,可以插入大部分数据类型的数据// offset 偏移量sb.insert(4,"d");System.out.println(sb );// javadata// - StringBuffer replace(int start, int end, String str) 在一个字符串中替换指定的 String字符这个序列的特征。sb.replace(1,4,"AVA");System.out.println(sb );// jAVAdata// - void setCharAt(int index, char ch)  指定索引处的字符设置为 ch。sb.setCharAt(4,'D');System.out.println(sb );// StringBuffer reverse()    使这个字符序列被序列的反转所取代。StringBuffer buffer = new StringBuffer("java");buffer.reverse();System.out.println(buffer );// 练习int num = 12345;String s = String.valueOf(num);StringBuffer sb3 = new StringBuffer(s);sb3.reverse();String s1 = String.valueOf(sb3);int i = Integer.parseInt(s1);System.out.println(i );}

2.2 StringBuilder

StringBuilder 是可变字符序列,但是不保证线程安全.建议在单线程情况下使用,如果没有线程安全的要求,建议优先使用StringBuilder,因为操作字符串更快!!

常用的方法与StringBuffer中的效果完全一致,所以…

方法自行演示…


String StringBuffer StringBuilder
字符串是否可变 不可以 可以 可以
线程安全 安全 安全 不保证安全
字符串拼接效率 最慢
版本 1.0 1.0 1.5
    public static void main(String[] args) {long begin = System.currentTimeMillis( );// 可以当前系统毫秒值// StringBuilder sb = new StringBuilder("");// StringBuffer sb = new StringBuffer("");String sb = "";for (int i = 0; i < 100000; i++) {//sb.append("1");sb += "1";}long end = System.currentTimeMillis( );// 可以当前系统毫秒值System.out.println(end - begin );}

三、日期

3.1 Date

java.util.Date (特别注意不是java.sql.包下的) ,代表一个日期,可以精确到毫秒.

ps: 计算机中计算时间的原点是1970-1-1 0:0:0

构造方法

  • Date() 以当前时间创建日期对象
  • Date(int year, int month, int date) 以指定年月日创建日期时间 (已过时)
  • Date(long date) 以指定毫秒创建日期对象
 private static void show1() {// 创建当前时间Date date = new Date( );System.out.println(date );// 以指定年月日,创建日期(过时了,不建议用)// 年需要-1900, 月份0-11,天正常Date date1 = new Date(100, 1, 1);System.out.println(date1 );// 以指定毫秒值创建日期// ps: 1秒=1000毫秒// 毫秒的基准点是1970-01-01 00:00:00Date date2 = new Date( 24 * 60 * 60 * 1000);System.out.println(date2 );long l = System.currentTimeMillis( );Date date3 = new Date(l);System.out.println(date3 );}

方法

有关于获得年月日时分秒的方法getXxx以及设置年月日时分秒setXxx , 但是大部分都过时了,只有getTime() 和setTime()没有过时…

  • long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
  • void setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
  public static void main(String[] args) {// 创建当前时间Date date = new Date( );System.out.println(date.getYear() + 1900 );System.out.println(date.getMonth() + 1 );// 获得当前时间毫秒值long time = date.getTime( );System.out.println(time );// 设置毫秒值date.setTime(24 * 60 * 60 * 1000);System.out.println(date );}

3.2 SimpleDateFormat

SimpleDateFormat类主要用来

  • 格式化(日期→文本) String format(Date date)

  • 解析(文本→日期) Date parse(String s)

要想完成日期格式化和解析,先得了解日期模板

Y 或者 y  年
M        月
d        日
H        24小时制
h        12小时制
m        分
s        秒
S        毫秒
E       周
常见的日期模板
yyyy-MM-dd  2000-01-01
yy-M-d      00-1-1
yyyy/MM/dd  2000/01/01
yyyy年MM月dd日 2000年01月01日
  • 下面的例子显示的日期和时间模式在美国现场解释。给定的日期和时间2001-07-04 12:08:56当地时间在美国太平洋时间时区。

    Date and Time Pattern Result
    "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
    "EEE, MMM d, ''yy" Wed, Jul 4, '01
    "h:mm a" 12:08 PM
    "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
    "K:mm a, z" 0:08 PM, PDT
    "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
    "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
    "yyMMddHHmmssZ" 010704120856-0700
    "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
    "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
    "YYYY-'W'ww-u" 2001-W27-3
  public static void main(String[] args) throws ParseException {// SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// 格式化(日期 --> 字符串)Date date = new Date( );System.out.println(date );String format = sdf.format(date);System.out.println(format );// 解析(字符串 --> 日期)// 要想解析成功,字符串要符合模板要求String s = "2000年01月01日 12:10:10";Date parse = sdf.parse(s);System.out.println(parse );}

3.3 Calendar

Calendar日历类,抽象类,不能直接创建对象使用,需要使用静态方法获得对象

 Calendar rightNow = Calendar.getInstance();

该类提供了很多静态常量属性(字段)用来代表某一时间,可以放在set() get()内使用

    public static void main(String[] args) {Calendar calendar = Calendar.getInstance( );System.out.println(calendar );// get(int field); 传入任意日历字段,获得任意日历信息int year = calendar.get(Calendar.YEAR);// 月份从0开始0-11int month = calendar.get(Calendar.MONTH);int day = calendar.get(Calendar.DAY_OF_MONTH);int hour = calendar.get(Calendar.HOUR);int minute = calendar.get(Calendar.MINUTE);int second = calendar.get(Calendar.SECOND);// 周日是第一天,周六是最后一天int week = calendar.get(Calendar.DAY_OF_WEEK);String[] arr = {"","周日","周一","周二","周三","周四","周五","周六"};String day_of_week = arr[week];System.out.println(year );System.out.println(month );System.out.println(day );System.out.println(hour );System.out.println(minute );System.out.println(second );System.out.println(day_of_week );System.out.println("------------------------" );calendar.set(Calendar.YEAR,2000);// 设置给定字段的指定值System.out.println(calendar.get(Calendar.YEAR) );System.out.println("-----------------------" );calendar.set(1990,0,1);// 设置年月日System.out.println(calendar.get(Calendar.YEAR) );System.out.println(calendar.get(Calendar.MONTH) );System.out.println(calendar.get(Calendar.DAY_OF_MONTH) );System.out.println("----------------------" );// 日历和日期相互转换// 日期 --> 日历calendar.setTime(new Date());System.out.println(calendar );// 日历 --> 日期Date date = calendar.getTime( );}

四、总结

1 String类里面方法很重要,都要熟悉
2 StringBuffer和StringBilder 主要是记特点,面试问
3 Date很重要,会创建时间,了解毫秒值操作
4 SimpleDateFormat类记住两个方法 format格式化 parse解析