Java String 字符串

来源:互联网 发布:sql入门到精通 编辑:程序博客网 时间:2024/05/21 22:33

1. 字符串就是双引号之间的数据

2. 字符串和数组初始化之后长度不变,内容不变,要改变值,则要新建字符串。每次new一个字符串,都是新建一个对象

3. String是java.lang包下的一个类

StringstringName=newString("string content");

4. 常用方法

str.length()                                     返回字符串长度

str.indexof(ch)                                查找ch在字符串第一次出现的位置,如果找不到返回-1

String[] arr=str.split(" ")                    System,out.println(Arrays.toString(arr))   按空格将字符串拆分成数组

str.substring(a,b)                             获取索引位置为a,b 之间的子串

String s2= s1.replace(String)         替换

str.charAt()                                     按照索引值获得字符串指定的字符

5. ==和equals()

==:判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象

equals(): 比较存储在两个字符串对象中的内容是否一致

6. 将字符串转化为字节数组 bytes bt:str.getBytes()

public class Test {public static void main(String[] args) {// 定义一个字符串String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";                // 出现次数int num = 0;         //循环遍历每个字符,判断是否是字符 a ,如果是,累加次数for (byte bt:(s.getBytes())){            // 获取每个字符,判断是否是字符aif ( bt=='a' ) {                // 累加统计次数num++; }}System.out.println("字符a出现的次数:" + num);}
7. StringBuilder

由于String的不可变性,档频繁操作字符时,会产生很多临时变量。StringBuffer是线程安全,而StringBuilder则没有,所以如果需要创建一个内容可变的字符串对象,应优先考虑使用StringBuilder类。

StringBuilder str1= new StringBuilder();

StringBuilder str2= new StringBUilder("immoc");

System.out.println(str2);

8. 方法

str.append(参数)

str. insert(位置,参数)

str.toString()

int length()

9. StringBuffer

StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。

StringBuffer、StringBuilder、String中都实现了CharSequence接口。

CharSequence是一个定义字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start, int end) 这几个API。

StringBuffer、StringBuilder、String对CharSequence接口的实现过程不一样,如下图所示:


图1  对CharSequence接口的实现

可见,String直接实现了CharSequence接口;StringBuilder 和 StringBuffer都是可变的字符序列,它们都继承于AbstractStringBuilder,实现了CharSequence接口。

总结

线程安全:
  • StringBuffer:线程安全
  • StringBuilder:线程不安全

速度:
一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。

使用环境:
  • 操作少量的数据使用 String;
  • 单线程操作大量数据使用 StringBuilder;
  • 多线程操作大量数据使用 StringBuffer。





0 0