Java中的String

String的构造方式

  1. 通过字面量定义String s1="hello world";
  2. 通过new 关键字调用构造方法定义String s2=new String("hello world"); s1!=s2

String具有不可变型,因此需注意:

  1. 常量与常量拼接的结果在常量池中,且常量池中不会存放相同内容的常量
  2. 定义一个字符串时,只要右边有一个是变量(如果用final修饰,则它就是常量,放在常量池中),则该字符串结果在堆中,例如:String s3=s1+s2;
  3. 如果拼接时调用intern()方法,则返回值在常量池中。用f

String 常见方法

方法返回值功能描述
length()int返回字符串长度
charAt(int index)char返回某索引处的字符
isEmpty()boolean判断是否为空字符
toLowCase()String将所有字母转换为小写
toUpperCase()String将所有字母转换为大写
trim()String返回字符串副本,忽略前部和尾部空白
equals(Object obj)boolean判断两字符串内容是否相等
equalsIgnoreCase(String str)boolean忽略大小写,判断两字符串内容是否相等
contact(String str)String连接字符串,作用类似:’+’
compareTo(String str)int比较两个字符串的大小(ACILL值)
substring(int beginindex)String截取从beginindex开始到最后的字符串
substring(int beginindex,int endindex)String截取字符串;左闭右开
startsWith(String str)boolean判断字符串是否以str为前缀
endsWith(String str)boolean判断字符串是否以str为后缀
startsWith(String str,int index)boolean判断从index开始的字符串是否以str为前缀
contains(String str)boolean判断字符串是否包含str
indexOf(String str)int返回str第一次出现的索引
intdexOf(String str,int index)int返回从index开始的子字符串第一次出现str的索引
lastindexOf(String str)intstr最后一次出现的索引
lastindexOf(String str,int index)int从index开始往前,str第一次出现的索引
replace(char old,char new)String将所有的old字符换为new
replace(String old,String new)String将所有old字符串换为new字符串
split(String str)String[]以str作为分隔,分割出多个数组元素
toCharArray()char[]以每一个字符看做字符数组的元素

上述方法有的参数是正则表达式的都写成String了

String与char[]型数组进行转换

  1. String --> char[] :调用String的toCharArray()方法
  2. char[] --> String: 调用String构造器 String str=new String(str);

String与byte[]型数组进行转换

  1. String --> byte[]:编码(由看得懂的转换为看不懂的底层),调用getBytes()方法 出现乱码与默认的编码集和你使用的编码集有关,常见的两个编码集有:utf-8 gbk
  2. byte[] -->String :解码(由看不懂的转换为看得懂的),调用构造器(可以选择你需要的编码集)

String StringBuffer StringBuilder

  1. String:不可变字符序列,底层用char[]储存

  2. StringBuffer:可变字符序列,线程安全,效率低,底层用char[]储存

  3. StringBuilder:可变字符序列,jdk5.0新增,线程不安全,效率高,底层用char[]储存

(三者效率从高到低:StringBuilder>StringBuffer>String)

源码分析:

  1. String str=new String() //char[] value=new char[0]

  2. String str=new String(“abc”) //char[] value=new char[3]{‘a’,‘b’,‘c’};

  3. StringBuffer sb1=new StringBuffer() //char[] value=new char[16] 底层创建了一个长度为16的char型数组

  4. StringBuffer sb2=new StringBuffer(“abc”) //char value=new char[sb2.length()+16] 创建了一个长度为19的char型数组

(注意一个问题:就是数组的长度和数组容量的区别 )

扩容问题:如果用append()方法添加的字符串长度大于16 ,则会创建一个新数组(地址没变),数组长度为(旧数组长度*2+2),

如果还是不够,就直接以加完后的数组做长度(地址未变) 旧数组长度是内容长度+16

用append()方法添加字符

StringBuffer常用方法

  1. 增:append(***)
  2. 删:delete(int start,int end) 左闭右开删除字符串
  3. 改:replace(int start,int end,String str) 用字符串代替某一段 setCharAt(int n,char ch) 代替某个位置的字符
  4. 查:charAt(int n) 查看n处的字符
  5. 插:insert(int n,**) 在n处插入内容,其他位置不变
  6. 长度:length()
  7. 反转:reverse()
  8. 遍历 for+charAt()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值