JavaSe:常用类
Java常用类
🍓String
-
注意String 已被声明为final
-
String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
-
字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
-
String对象的字符内容是存储在一个字符数组value[]中的。
⭐String类和常量池
-
String对象的两种创建方式:
1
2
3String str1 = "abcd";
String str2 = new String("abcd");
System.out.println(str1==str2);//false
👻这两种不同的创建方法是有差别的,第一种方式是在常量池中拿对象,第二种方式是直接在堆内存空间创建一个新的对象。
- 🍅记住:只要使用new方法,便需要创建新的对象。

1 | String s1 = "abc"; |
💦结论:
- 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
- 只要其中有一个是变量,结果就在堆中
- 如果拼接的结果调用intern()方法,返回值就在常量池中
💖String类型的常量池比较特殊。它的主要使用方法有两种:
- 直接使用双引号声明出来的String对象会直接存储在常量池中。
- String如果被final修饰, 那么 就是常量
- 如果不是用双引号声明的String对象,可以使用String提供的intern方String.intern() 是一个Native方法,它的作用是:如果运行时常量池中已经包含一个等于此String对象内容的字符串,则返回常量池中该字符串的引用;如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。
1 | String s1 = new String("s1"); |

❤️注意: String只要是常量形式,都是保存在常量池中。
-
Q: String s= new String (“123”); 方式创建对象,在内存中创建了几个对象?
A: 2个 ,堆区s + 常量池 “123”; (如果常量池中已经声明过“123” ,则是1个)
🌟String 类型作为参数传递给函数
- 首先,必须明白java函数的参数传递方式只有值传递
- 理解String的不可变性。
- temp_str赋值后,不在指向str指向的那一块内存

1 | public class StringTest2 { |
🌟String的常用方法
- 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(不包含)的一个子字符串。
- 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
- String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
- String replace(CharSequence target, CharSequence replacement):**使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 **
🌟涉及正则表达式的String Method
- 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个,如果超过了,剩下的全部都放到最后一个元素中。
1 | package pers.dhx_.java0603; |
1 | package pers.dhx_.java0603; |
🎧String与基本数据类型转换
字符串 —>基本数据类型、包装类
- Integer.parselent(String s);
- 类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型
基本数据类型、包装类 —>字符串
- 调用String类的public String **valueOf(int n)**可将int型转换为字符串相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、valueOf(boolean b)可由参数的相应类型到字符串的转换
String与字符数组转换
-
字符数组 -->字符串
- String 类的构造器:String(char[]) 和 String(char[],int offset,int length)分别用字符数组中的全部字符和部分字符创建字符串对象。
-
字符串 -->字符数组
- public char[] toCharArray():将字符串中的全部字符存放在一个字符数组中的方法。
- public void getChars(int srcBegin, int srcEnd, char[] dst,int dstBegin):提供了将指定索引范围内的字符串存放到数组中的方法。
1 | package pers.dhx_.java0603; |
🐭StringBuffer 、StringBuilder
1 | package pers.dhx_.java0603; |
🐘StringBuffer常用方法
很类似于C++的string类,注意start,end 区间都是左闭右开怕[ begin,end),
StringBuilder的方法与其相同。
-
StringBuffer append(String str):提供了很多的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() :把当前字符序列逆转
1
2
3
4
5public 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)
🐶三者效率对比
-
String(JDK1.0):不可变字符序列
-
StringBuffer(JDK1.0):可变字符序列、效率低、线程安
-
StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全
1 | //初始设置 |
🌑时间API

🐆JDK8.0之前
🎈java.lang.System类
- System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
- 此方法适于计算时间差。
- 计算世界时间的主要标准有:
- UTC(Coordinated Universal Time)
- GMT(Greenwich Mean Time)
- CST(Central Standard Time)
🎈java.util.Date类
- 表示特定的瞬间,精确到毫秒
- 很多方法已经是过时的了(@Deprecated) ,不建议去用了
- 构造器:
- Date():使用无参构造器创建的对象可以获取本地当前时间。
- Date(long date)
- 常用方法
- getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
- **toString()😗*把此 Date 对象转换为以下形式的 String: dow mon ddhh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
- 其它很多方法都过时了。
🎈java.text.SimpleDateFormat类
- Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
- 它允许进行
- 格式化:日期—>文本、
- 解析:文本—>日期
- 格式化:
- SimpleDateFormat() :默认的模式和语言环境创建对象
- public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
- public String format(Date date):方法格式化时间对象date
- 解析:
- **public Date parse(String source)**从给定字符串的开始解析文本,以生成一个日期。
🎈java.util.Calendar(日历)类
-
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
-
获取Calendar实例的方法
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器。
-
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
- public void set(int field,int value)
- public void add(int field,int amount)
- public final Date getTime()
- public final void setTime(Date date)
-
注意:
- 获取月份时:一月是0,二月是1,以此类推,12月是11
- 获取星期时:周日是1,周二是2 …周六是7
⭐✡️🌟获取两个字符串中最大相同子串
1 | package pers.dhx_.java0604; |
🙉StringBuffer.append() 空字符串
1 | package pers.dhx_.java0606; |










