目录
一、String
1.字符串声明
2.String类
3.String常用方法
3.1构造方法
3.2实例方法
3.2.1Demo
3.2.2字符串判断相等
3.2.3intern
3.3static方法
二、StringBuffer
1.构造方法
2.常用的方法
三、StringBuilder
用 char 类型的变量来表示单个字符,用单引号引起来。
char c = 'A'; //单引号
char cA = 65; //数字
char c1 = '\u8888'; //Unicode码
System.out.println(c); //A
System.out.println(cA); //A
System.out.println(c1); //袈
多个字符按照一定的顺序组成的列表就叫作字符序列
字符串 java.lang.String 可以用来表示多个字符,用 "" 引起来。字符串是引用数据类
型,默认值是 null 。
JDK13 新增文本块(预览),在 JDK15 正式在字符串支持文本块,用 """ 表示。
//字符串声明
String str = "云创动力"; // 字面量 比较常用
String str1 = new String("云创动力"); // 字符串对象
字符串具有不可变特性。
public final class String 是用 final 修饰的类,在 Java 中用 final 修饰的类不能被
继承,也就是说 String 没有子类。
在 Java 中,关键字 final 表示最终的。可以用来修饰类、方法、变量。
1. 被 final 修饰的类,不能被继承
2. 被 final 修饰的方法,不能被重写
3. 被 final 修饰的变量,不能变。如果是基本数据类型不能重新赋值,如果是引用数据类型不
能改变引用。
jdk 1.8及之前版本:
private final char value[]; // 用于存放内容,字符串底层其实就是一个字符数组
private int hash; // 用来存放hash值
jdk1.9及以后版本:
private final byte value[]; // 用于存放内容,1.9之后使用字节数组存储
private int hash; // 用来存放hash值
private byte coder; // 编码方式,0 -LATIN1, 1 - UTF-16
从中我们发现,不管是 jdk 8 及以前还是 jdk 9 及以后版本, value 属性都是 final 的。
就说明,字符串一旦声明就不可变。所以字符串拥有不可变性。
String() | 初始化新创建的 String对象,使其表示空字符序列 |
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 String |
String(byte[]bytes,Charset charset) | 构造一个新的String用指定的字节的数组解码charset |
String(byte[] bytes, String charsetName) | 构造一个新的String用指定的字节的数组解码charsetName |
String(char[] value) | 构造一个新的String由指定的字符的数组构成 |
String(String original) | 初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本 |
String(StringBuffer buffer) | 分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列 |
String(StringBuilder builder) | 分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列 |
charAt(int index) | char | 返回指定索引处的字符 |
codePointAt(int index) | int | 返回指定索引处的字符(Unicode代码点) |
compareTo(String anotherString) | int | 按字典顺序比较两个字符串 |
compareToIgnoreCase( String str) |
int | 按字典顺序比较两个字符串,忽略大小写 |
concat(String str) | String | 将指定的字符串连接到该字符串的末尾 |
contains(CharSequenc e s) |
boolean | 当且仅当此字符串包含指定的s值序列时才返回true |
endsWith(String suffix) | boolean | 测试此字符串是否以指定的后缀结尾 |
startsWith(String prefix) | boolean | 测试此字符串是否以指定的前缀开头 |
equals(Object anObject) | boolean | 比较字符串 |
equalsIgnoreCase(Str ing anotherString) |
boolean | 比较字符串,忽略大小写 |
getBytes() | byte[] | 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中 |
getBytes(Charset charset) | byte[] | 使用给定的charset将该String编码为字节序列,将结果存储到新的字节数组中 |
hashCode() | int | 返回此字符串的哈希码 |
indexOf(String str) | int | 返回指定字符第一次出现的字符串内的索引 |
indexOf(String str,int fromIndex) | int | 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始 |
isEmpty() | boolean | 判断字符串是否是空串 |
lastIndexOf(String str) | int | 返回指定子字符串最后一次出现的字符串中的索引 |
lastIndexOf(String str, int fromIndex) | int | 返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始向后搜索 |
length() | int | 返回此字符串的长度 |
replace(char oldChar, char newChar) | String | 返回从替换所有出现的导致一个字符串oldChar在此字符串 newChar |
split(String regex) | String[] | 将此字符串分割为给定的 regular expression的匹配.使用特殊字符时需要转义 |
substring(int beginIndex) | String | 从指定索引开始(包括)截取字符串并返回 |
substring(int beginIndex, int endIndex) | String | 从指定索引开始(包括)到指定索引结束(不包括) |
toLowerCase() | String | 转换小写 |
toUpperCase() | String | 转换大写 |
trim() | String | 去掉首尾空格 |
toString() | String | 返回字符串 |
public static void main(String[] args) {
//字符串声明
String str = "云创动力-开发喵-云创动力"; //字面量 比较常用
System.out.println(str.charAt(0)); //云
System.out.println(str.codePointAt(1));
char c = 20113; //云 Unicode 代码点
char c1 = 21019; //创 Unicode 代码点
String s = "a"; // 97 Unicode 代码点
String s1 = "A"; // 65 Unicode 代码点
System.out.println(s.compareTo(s1));//32 Unicode 代码点相比较
System.out.println(s.compareToIgnoreCase(s1)); //0 忽略大小写
System.out.println(str.contains("云")); //true
System.out.println(str.endsWith("开发喵")); //true 以某个字符串结尾
System.out.println("\"A\".equals(s) -->" + "A".equals(s)); //false
System.out.println("\"A\".equalsIgnoreCase(s) -->" +
"A".equalsIgnoreCase(s)); //true
System.out.println("====================");
System.out.println("str.indexOf(\"云\") --> " + str.indexOf("云")); //0
System.out.println("================");
String str1 = "";
System.out.println(str1.isEmpty()); //true
String str2 = " ";
System.out.println(str2.length()); // 1
// String str2 = null;
// System.out.println(str2.isEmpty());// throw new NullPointerException();
System.out.println(str.replace("-", ",")); //云创动力,开发喵,云创动力
System.out.println(str.replaceFirst("-", ",")); //云创动力,开发喵-云创动力
System.out.println("============");
String[] strs = str.split("-");
System.out.println(Arrays.toString(strs));
System.out.println("============");
String str3 = "ABcdefg";
System.out.println(str3.substring(2)); //cdefg
System.out.println(str3.substring(2,5));//cde
System.out.println(str3.toLowerCase()); //abcdefg
System.out.println(str3.toUpperCase()); //ABCDEFG
String str4 = " 你好啊 !! ";
System.out.println(str4.trim()); //你好啊 !!
System.out.println(str4.replace(" ", "")); //你好啊!!
}
字符串(String)是引用数据类型,所以使用 equals 方法进行比较。
public static void main(String[] args) {
String str = "云创动力";
String str1 = "云创动力";
System.out.println("str.equals(str1) -->" + str.equals(str1)); //true
System.out.println("str == str1 -->" + (str == str1)); //true
String str3 = "云创" + "动力";
System.out.println("str.equals(str3) --> " + str.equals(str3)); //true
System.out.println("str == str3 --> " + (str == str3)); //true
System.out.println("==========");
String str4 = "云创";
String str5 = "动力";
String str6 = str4 + str5;
System.out.println("str.equals(str6) --> " + str.equals(str6)); //true
System.out.println("(str == str6) --> " + (str == str6)); //false
System.out.println("================");
String str7 = "云创" + str5;
String str8 = str4 + "动力";
System.out.println("str7 == str8 --> " + (str7 == str8)); //false
System.out.println("str == str7 -->" + (str == str7)); //false
System.out.println("str == str8 --> "+ (str == str8));//false
System.out.println("str6 == str7 --> " + (str6 == str7));//false
System.out.println("================");
String s = new String("云创动力");
String s1 = new String("云创动力");
System.out.println("=============");
System.out.println(s.equals(str)); //true
System.out.println(s.equals(s1)); //true
System.out.println((s == str)); //false
System.out.println((s == s1)); //false
}
将字符串放入字符串常量池的方法。当调用 intern 方法时,如果池中已经包含一个与 Str
ing 该方法确定的对象相等( equals的结果是true )的字符串,则返回池中的字符串。否
则,将此 String 对象添加到池中并 String 返回对该对象的引用。
public class Main {
public static void main(String[] args) {
String s = "he";
String s1 = "llo";
String s3 = s + "llo";
/*
* 常量池中有没有 s3 的值,有则返回池中的字符串
* 没有将此对象放进常量池,并返回
*/
String s7 = s3.intern();
String s8 = "hello";
System.out.println(s3 == s7);//true
System.out.println(s7 == s8);//true
System.out.println(s8 == s3);//true
}
}
isEmpty 和 isBlank 区别
isEmpty 当且仅当字符串长度为0时返回 true
isBlank 当字符串长度为0或字符串中全是空白字符时都是 true
copyValueOf(char[] data) | String | 将 char数组转换为 字符串,相当于 valueOf(char[] chs) |
valueOf(类型 变量名) | String | 将不同类型的数据转换为 字符串,基本数据类型直接转为字符串,非空引用数据类型调用其 toString() |
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
StringBuffer() | 构造一个没有字符的字符串缓冲区,初始容量为16个字符 |
StringBuffer(int capacity) | 构造一个没有字符的字符串缓冲区和指定的初始容量 |
StringBuffer(String str) | 构造一个初始化为指定字符串内容的字符串缓冲区 |
StringBuffer(CharSequence seq) | 构造一个包含与指定的相同字符的字符串缓冲区CharSequence |
append(Object obj) | StringBuffer | 追加 Object参数的字符串 |
capacity() | int | 返回当前容量 |
trimToSize() | void | 尝试减少用于字符序列的存储空间 |
delete(int start,int end) | StringBuffer | 删除此序列的子字符串中的字符 |
reverse() | StringBuffer | 导致该字符序列被序列的相反代替 |
toString() | String | 返回表示此顺序中的数据的字符串 |
StringBuffer sb = new StringBuffer();
sb.append("a").append("b");
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence