第七章——字符序列

目录

一、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


一、String

用 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); //袈

多个字符按照一定的顺序组成的列表就叫作字符序列 

  •  String 字符串
  • StringBuffer 字符串缓冲区,是线程安全的
  • StringBuilder 字符串构造器,非线程安全的
  • CharBuffer 字符缓冲区 

字符串 java.lang.String 可以用来表示多个字符,用 "" 引起来。字符串是引用数据类
型,默认值是 null 。 

JDK13 新增文本块(预览),在 JDK15 正式在字符串支持文本块,用 """ 表示。

1.字符串声明

//字符串声明
String str = "云创动力"; // 字面量 比较常用
String str1 = new String("云创动力"); // 字符串对象

2.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 的。
就说明,字符串一旦声明就不可变。所以字符串拥有不可变性。

3.String常用方法

3.1构造方法
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) 分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列
3.2实例方法
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 返回字符串
3.2.1Demo
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(" ", "")); //你好啊!!
}
3.2.2字符串判断相等

字符串(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
}
3.2.3intern

将字符串放入字符串常量池的方法。当调用 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 

3.3static方法
copyValueOf(char[] data) String 将 char数组转换为 字符串,相当于 valueOf(char[] chs)
valueOf(类型 变量名) String 将不同类型的数据转换为 字符串,基本数据类型直接转为字符串,非空引用数据类型调用其 toString()

二、StringBuffer

public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
  • 线程安全,可变的字符序列
  • 字符串缓冲区
  • StringBufer 是可变的 

1.构造方法

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

2.常用的方法

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");

三、StringBuilder

public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
  • 一个可变的字符序列。 此类提供与 StringBuffer 相同的API,但不保证同步
  • 在可能的情况下,建议使用 StringBuilder ,因为它在大多数实现中将更快
  • 在使用 String 实例拼接(' + ')时,编译器会使用 StringBuilder 来拼接字符串

你可能感兴趣的:(java,开发语言)