day16_API
今日内容
零、 复习昨日
一、作业
二、String
三、StringBuffer&StringBuilder
四、日期
零、 复习昨日
Object
- equals
- toString
包装类
- 和String相互转换
Math&随机
一、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解析