Java字符串知识整理

一、String类

String类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

String的底层其实是一个被final修饰的字符数组,部分源码如下:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

所以字符串对象一旦创建,是不可以改变的,如下:

@Test
public void  Demo(){
    //s 为字符串对象的引用,里面保存的时内存地址,可以改变!  "abc"为字符串对象,不能改变。
    String s  = "abc";
}

二、String类的部分构造方法

//String(byte[] bytes) 传入一个字节数组,使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
@Test
public void test_01(){
   byte[] bytes = {97,98,99,100};
   String str = new String(bytes);
   //打印abcd
    System.out.println(str);
}
//第一个数代表起始索引,第二个代表转换的个数
@Test
public void test_02(){
    byte[] bytes = {97,98,99,100};
    String str = new String(bytes,2,1);
    //打印c
    System.out.println(str);
}
//String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
@Test
public void test_03(){
    char[] chars ={'a','b','c'};
    String str = new String(chars);
    //打印abc
    System.out.println(str);
}
//第一个数代表起始索引,第二个代表个数
@Test
public void test_04(){
    char[] chars ={'a','b','c'};
    String str = new String(chars,1,1);
    //打印b
    System.out.println(str);
}

三、String类中的部分其他方法

//返回字符串的长度
@Test
public void test_01(){
    String a = "abc";
    int length = a.length();
    System.out.println(length);
}
//返回指定索引处的char值
@Test
public void test_02(){
    String a = "abc";
    char c = a.charAt(0);
    //打印为a
    System.out.println(c);
}
//substring(int beginIndex, int endIndex)  获取字符串的一部分,返回新字符串;[0,2)不包含第二个索引位置
@Test
public void test_03(){
    String a = "abc";
    String s = a.substring(0, 2);
    //打印为ab
    System.out.println(s);
}
//substring(int beginIndex) 返回新字符串,包含给定索引位置,及其之后的全部字符
@Test
public void test_04(){
    String a = "abc";
    String s = a.substring(1);
    //打印为bc
    System.out.println(s);
}
//replaceAll(String regex, String replacement)返回新的字符串
// 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
@Test
public void test_05(){
    String a = "a,b,c";
    String s = a.replaceAll(",", "-");
    //打印为a-b-c
    System.out.println(s);
}
//toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写
@Test
public void test_06(){
    String a = "abc";
    String s = a.toUpperCase();
    //打印为ABC
    System.out.println(s);
}
//startsWith(String prefix) 返回boolean值  测试此字符串是否以指定的前缀开始
@Test
public void test_07(){
    String a = "abc";
    boolean b = a.startsWith("b");
    //打印为false
    System.out.println(b);
}
//toCharArray()  将此字符串转换为一个新的字符数组
@Test
public void test_08(){
    String a = "abc";
    char[] chars = a.toCharArray();
}

四、StringBuffer类

线程安全的可变字符序列可以创建字符串缓冲区对象,提高操作字符串的效率。

其中的一些方法实例:

//reverse() 将此字符序列用其反转形式取代
@Test
public void test_01(){
    StringBuffer s = new StringBuffer();
    StringBuffer reverse = s.append(1).append(2).append(3).reverse();
    //打印结果为321
    System.out.println(reverse);
}
//replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。
//[0,1) 右开区间,不包含给定的第二个索引位置的字符
@Test
public void test_02(){
    StringBuffer s1 = new StringBuffer();
    StringBuffer s2 = s1.append("asd");
    StringBuffer s3 = s2.replace(0, 1, "b");
    //打印结果为bsd
    System.out.println(s3);
}
//delete(int start, int end) 移除此序列的子字符串中的字符。
//[0,1) 右开区间,不包含给定的第二个索引位置的字符
@Test
public void test_03(){
    StringBuffer s1 = new StringBuffer();
    StringBuffer s2 = s1.append("asd");
    StringBuffer s3 = s2.delete(0, 1);
    //打印结果为sd
    System.out.println(s3);
}
//如果StringBuffer对象调用了toString方法,就会把可变的字符缓冲区对象变为不可变的String对象
@Test
public void test_04(){
    StringBuffer s1 = new StringBuffer();
    StringBuffer s2 = s1.append("asd");
    String s3 = s2.toString();
}

五、StringBuilder类

此类与StringBuffer用法基本相同,但它是线程不安全的,效率比StringBuffer高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值