Java中常用类String

本文深入探讨了Java中的String、StringBuffer和StringBuilder类,详细解释了它们的特性和用途。重点在于它们的可变性、线程安全性和执行效率。同时,介绍了字符串的各种操作方法,如比较、拼接、查找、截取等,并强调了在不同场景下的最佳实践。此外,还涉及字符串编码、解码以及与字符数组的交互。通过对各种操作的性能分析,帮助开发者理解如何更高效地处理字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String 不可变长的字符序列

StringBuffer 可变长的字符序列,同步的|线程安全的

StringBuilder 可变长的字符序列,不同步|线程不安全,相对效率高

执行效率: StringBuilder > StringBuffer > String

String : String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。

String str = "abc"; 1个对象 "abc"->常量池中,new的对象在堆内存中, "abc"字符串常量->存在与字符串常量池中

String str2 = new String("haha");  2个 new->堆  "haha"->常量池

String str3 = new String("abc");  1个 new->堆  "abc"->常量池中已有,在前面红一行时候构建

String s1 = new String()//String() 初始化新创建的 String对象,使其表示空字符序列

String s2 = new String("abc")//String(String original) 初始化新创建的String对象,使其表示与参数相同的字符序列;

String s3 = new String(chars)//String(char[] value) 分配新的 String ,使其表示当前包含在字符数组参数中的字符序列

String s4 = new String(chars,1,3)//String(char[] value, int offset, int count) 分配一个新的 String ,其中包含字符数组参数的子数组中的字符

String str = "中国"//String(byte[] bytes) 通过使用平台的默认字符集解码指定的字节数组构造新的 String 。

byte[] arr = str.getBytes("gbk")//byte[] arr = str.getBytes(); //utf-8->1汉字3个字节   gbk->1汉字2字节

String s7 = new String(arr,0,2,"gbk")//String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 

String底层使用 : private final byte[] value 存储字符串中的字符数据,在jdk11中底层使用byte[],在jdk8之中使用char[]

str1.charAt(3)//char charAt(int index) 返回指定索引处的 char值

str1.codePointAt(3)//int codePointAt(int index) 返回指定索引处的字符(Unicode代码点)

str1.codePointBefore(3)//int codePointBefore(int index) 返回指定索引之前的字符(Unicode代码点)

str1.compareTo(str2)//int compareTo(String anotherString) 按字典顺序比较两个字符串

返回值:
                >0   ==> str1>str2
                ==0  ==> str1==str2
                <0  ==>  str1<str2

str1.compareToIgnoreCase(str2)//int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,忽略大小写差异

str1.concat(str2)//String concat(String str) 将指定的字符串连接到此字符串的末尾

str1.contains("ABC")//boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列时,才返回true

str1.endsWith("abc")//boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结尾

str1.startsWith("abc")//boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开头

//byte[] getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中

//byte[] getBytes(String charsetName) 使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中

str1.getChars(6,10,arr,3)//void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中

str1.indexOf("abc")//int indexOf(String str) 返回指定子字符串第一次出现的字符串中的索引

str1.lastIndexOf("abc")//int lastIndexOf(String str) 返回指定子字符串最后一次出现的字符串中的索引

"短道速滑队".length()//int length() 返回此字符串的长度

"嘻哈".repeat(3)//String repeat(int count) 返回一个字符串,其值为此字符串的串联重复 count次

str1.replace("abc","ABC")//String replace(CharSequence target, CharSequence replacement) 将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列

"name=张三".split("=")//String[] split(String regex) 将此字符串拆分为给定 regular expression的匹配 项 

" abc ".trim()//String trim() 返回一个字符串,其值为此字符串,删除了所有前导和尾随空格,其中space被定义为其代码点小于或等于 'U+0020' (空格字符)的任何字符

" abc ".strip()//String strip() 返回一个字符串,其值为此字符串,并删除了所有前导和尾随 white space 

" abc ".stripLeading()//String stripLeading() 返回一个字符串,其值为此字符串,并删除了所有前导 white space 。

//String stripTrailing() 返回一个字符串,其值为此字符串,并删除所有尾随 white space 。

//“ ”全角空格

//“ ”全角空格

str1.substring(3)//String substring(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。

str1.substring(3,6)//String substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串

str1.toCharArray()//char[] toCharArray() 将此字符串转换为新的字符数组

str1.toUpperCase()//String toUpperCase() 使用默认语言环境的规则将此 String所有字符转换为大写

//String toLowerCase() 使用默认语言环境的规则将此 String所有字符转换为小写

String.valueOf(false)//static String valueOf(boolean b) 返回 boolean参数的字符串表示形式

" ".isBlank()//boolean isBlank() 如果字符串为空或仅包含 white space代码点,则返回 true ,否则 false 

" ".isEmpty()//boolean isEmpty() 返回 true ,当且仅当, length()是 0 

s3.intern()==s5//String intern() 返回字符串对象的规范表示

s3.intern()==s5//jdk1.7之后规则: 先判断字符串常量池中是否存在当前字符串常量,果存在直接返回常量池中对象的引用,如果不存在, 会拷贝一个当前对象的引用(地址)到常量池中,然后返回常量池中的引用

== 比较对象地址;equals 可以实现比较对象内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值