第七章——字符序列

目录

一、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 来拼接字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱桃桃桃桃桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值