20.Java学习笔记第二十节——常用类(尚硅谷视频整理)


一、字符串相关的类

<1>String类

1.String特性

> String类:代表字符串。
> String是一个final类,代表不可变的字符序列(不可被继承)。
> String对象的字符内容是存储在一个字符数组value[]中的。
> String实现了Serializable接口,表示字符串是支持序列化的。
> String实现了Comparable接口,表示字符串可以比较大小
> String代表不可变的字符序列,简称不可变性。体现:
(1)当对字符串重新赋值时,需要重新指定内存区,不能使用原有的value进行赋值。如

String s1="abc";
String s2="abc";
s1="Hello";

此时的内存结构如下:
在这里插入图片描述
(2)当对现有的字符串进行连接操作时,也需要重新指定内存区,不能使用原有的value进行赋值。
(3)当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区,不能使用原有的value进行赋值。

> 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。(字符串常量池中是不会存储相同内容的字符串的)

2.String 对象的创建
1.
String str = "hello";

2.
//本质上this.value = new char[0];
String s1 = new String();

String str1 = “abc”;与String str2 = new String(“abc”);的区别?

(1)通过字面量定义的方式,此时数据声明在方法区中的字符串常量池中。
(2)通过new+构造器的方式:此时数据的地址值是数据在堆空间中开辟空间以后对应的地址值。

内存解析如下:
在这里插入图片描述
注意:

(1) 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
(2)只要其中有一个是变量,结果就在堆中 。
(3)如果拼接的结果调用intern()方法,返回值就在常量池中 。

在这里插入图片描述

String s1="Hello";
String s2=s1+"World";
System.out.println(s1==s2);

此时结果是 false,但是

final String s1="Hello";
String s2=s1+"World";
System.out.println(s1==s2);

此时结果就是 true。
因为加了final,相当于s1变成了常量,常量的拼接在常量池中。

3.String 的常用方法
3.1 常用方法1

> int length():返回字符串的长度: return value.length
> char charAt(int index): 返回某索引处的字符return value[index]
> boolean isEmpty():判断是否是空字符串:return value.length == 0
> String toLowerCase():使用默认语言环境,将String 中的所有字符转换为小写
> String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
> String trim():返回字符串的副本,忽略前导空白和尾部空白
> boolean equals(Object obj):比较字符串的内容是否相同
> boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
> String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
> int compareTo(String anotherString):比较两个字符串的大小
> String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
> String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

3.2 常用方法2

> boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
> boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
> boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
> boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true
> int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
> int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
> int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
> int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
注:indexOf和lastIndexOf方法如果未找到都是返回-1

3.3 常用方法3

> String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
> String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
> String replaceAll(String regex, String replacement) : 使 用 给 定 的replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
> String replaceFirst(String regex, String replacement) : 使 用 给 定 的replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
> boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
> String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
> String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。

4.复习String类与其他结构之间的转换
4.1 与基本数据类型、包装类之间的转换

(1)String→基本数据类型、包装类

String str1="123";
int num=Integer.parseInt(str1);

(2)基本数据类型、包装类→String

String str2=String.valueOf(num);

或者给字符串加一个符号:

String str3=num+" ";
4.2 与字符数组之间的转换

(1)String→char[ ]
调用String的toCharArray()方法

String str1="abc123";
char[] charArray=str1.toCharArray();
for(int i=0;i<charArray.length;i++)
	System.out.println(charArray[i]);

(2)char[ ]→String

char[] arr =new char[]{'h','e','l','l','o'};
String str2=new String(arr);
System.out.println(str2);
4.3 与字节数组之间的转换

(1)String→byte[ ]

String str1="abc123";
byte[] bytes=str1.getBytes();
System.out.println(Arrays.toString(bytes));

(2)byte[ ]→String

String str2=new String(bytes);
System.out.println(str2);

<2>StringBuffer类

1.StringBuffer 的常用方法

> StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
> StringBuffer delete(int start,int end):删除指定位置的内容
> StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
> StringBuffer insert(int offset, xxx):在指定位置插入xxx
> StringBuffer reverse() :把当前字符序列逆转

此外,还定义了如下的方法:(同String)

> public int indexOf(String str)
> public String substring(int start,int end)
> public int length()
> public char charAt(int n )
> public void setCharAt(int n ,char ch)

<3>StringBuilder类

<4>三者异同

String:不可变的字符序列;底层使用char[]数组存储。
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]数组存储。
StringBuilder:jdk5.0新增的;可变的字符序列;线程不安全的,效率高;底层使用char[]数组存储。
三者效率排序:StringBuilder > StringBuffer > String


二、JDK8之前日期时间API

1. java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。称为时间戳。
> 此方法适于计算时间差。

long time=System.currentTimeMillis();
System.out.println(time);

2.1 java.util.Date类

表示特定的瞬间,精确到毫秒。
(1)两个构造器的使用
构造器① ——Date():创建一个当前时间的Date对象

Date date1=new Date();
System.out.println(date1.toString());

构造器② ——Date(long date):创建指定毫秒数的Date对象

Date date2=new Date(155030620410L);
System.out.println(date2.toString());

输出结果是现在时间往前推155030620410毫秒的时间。

(2)两个方法的使用
toString():显示当前的年、月、日、时、分、秒
getTime():获取当前Date对象对应的毫秒数(时间戳)。

2.2 java.sql.Date类(子类)

对应数据库中的日期类型的变量

(1)创建java.sql.Date对象

java.sql.Date date3=new java.sql.Date(35235325345L);
System.out.println(date3);

(2)将java.util.Date对象转换为 java.sql.Date对象(父类→子类)

Date date4=new java.sql.Date(2344454648146L);
java.sql.Date date5=(java.sql.Date)date4;

Date date6=new Date();
java.sql.Date date7=new java.sql.Date(date6.getTime());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值