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高。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法回答关于2023年的问题,因为我无法提供未来的信息。但是,如果你对Java基础知识点有兴趣,我可以为你提供一些相关的信息。Java基础知识点包括数据类型、变量、运算符、控制流程、数组、字符串、面向对象编程等。你可以参考Java基础教程系列,其中包含了Java基础知识点、Java8新特性、Java集合、Java多线程等内容,可以帮助你轻松学习Java编程。\[1\]另外,Javac是Java编译器程序的一部分,负责将Java源代码编译成字节码文件,也就是class文件,供Java虚拟机(JVM)执行。\[2\]Java分为三个体系,分别是Java SE(标准版)、Java EE(企业版)和Java ME(微型版),每个体系都有不同的用途和应用领域。\[3\]希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [java基础知识点](https://blog.csdn.net/guorui_java/article/details/120317300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java基础知识整理,推荐收藏!](https://blog.csdn.net/weixin_42599558/article/details/114148399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值