基于API的类的学习day02

基于API的类的学习day02

String类 - 字符串

1.特点:
 a.字符串就是字符序列,本质上就是一个字符数组
 b.String类是final修饰的,不可被继承的
 c.String一旦创建就不可修改,属于不可变的字符序列
 d.String重写了toString()

2.创建方式
 a.直接创建
  String str = “”;

 b.构造方法创建
  String()
  String(byte[] bytes)
  String(byte[] bytes, Charset charset)
  String(char[] value)
  String(String original)

3.常量池
 a.常量池中放的都是常量
 b.只要直接赋值的字符串,都指向常量池

4.内存编码问题
 1)编码方式:
  UniCode字符集 -> jvm识别
  1字符 = 2字节

  操作系统识别的编码方式: GBK UTF-8 ASCII ISO8859-1
  UTF-8 -> 1字符 = 3字节
  GBK -> 1字符 = 2字节

 2)编码: 字符 -> 字节
  API:
   byte[] str.getBytes() -> 默认方式
   byte[] str.getBytes(“GBK”) -> 指定方式

 3)解码: 字节 -> 字符
  构造方法:
  new String(byte[],“GBK”)
  new String(byte[])

 4)乱码问题:
  a.产生原因:
   如果以gbk的方式编码得到的数组,然后以UTF-8的方式进行解码,就会出现乱码问题
  b.解决乱码:
   1.按照错误的方式进行编码
   2.得到字节数组,在重新解码

5.常用API:
 char charAt(int index)
 String concat(String str)
 boolean contains(CharSequence s)
 boolean endsWith(String suffix)
 boolean equalsIgnoreCase(String anotherString)
 int indexOf(String str)
 boolean isEmpty()
 int lastIndexOf(String str)
 int length()
 String replace(char oldChar, char newChar)
 boolean startsWith(String prefix)
 String substring(int beginIndex)
 char[] toCharArray()
 String toLowerCase()
 String toUpperCase()
 String trim()
 static String valueOf(Object obj)

6.正则表达式 - 字符串的一些排列规则
 常用标识符:
 边界匹配器:
 开头: 以 '^'开头
 结尾: 以 美元符号结尾

字符类:
  [ ]:表示一个字符的位置
  [abc]:可以出现a,或者可以出现b,或者可以出现c
  [a-zA-Z]:所有的字母,包括大小写
  [ ]: 在[]中不需要添加\表示转义

Greedy 数量词:
  /+ -> 1 或 n
  /? -> 0 或 1
  /* -> 0 或 n
  {n} -> 刚好出现n次
  {n,} -> 至少出现n次
  {n,m} -> 最少出现n次,最多出现m次

预定义字符类:
  . 表示所有字符
  \d 表示[0-9]
  \w 表示[a-z0-9A-Z_]

转义字符:
  . 表示.本身
  \ 表示\本身
  \r
  \t
  \n

正则表达式常用API:
  String replaceAll(String regex, String replacement)
  boolean matches(String regex)
  String[] split(String regex)

StringBuilder 和 StringBuffer

1.StringBuilder 和 StringBuffer都是属于可变长字符串[在改变字符串的时候,不会产生新的对象]

2.创建:
 new StringBuilder()
 new StringBuilder(“String”)

3.常用API:
 StringBuilder append(Object obj) - 追加
 StringBuilder delete(int start, int end) - 删除
 StringBuilder insert(int offset, boolean b) - 插入
 StringBuilder replace(int start, int end, String str) - 替换
 StringBuilder reverse() - 反转

4.区别:
 a.版本:
  StringBuilder -> JDK1.5
  StringBuffer -> JDK1.0

 b.线程安全
  StringBuilder: 线程不安全,效率高
  StringBuffer: 线程安全,效率低

 c.使用环境:
  操作少量的数据使用 String
  单线程环境下大量数据使用 StringBuilder
  多线程环境下大量数据使用 StringBuffer

 d.效率对比
  String < StringBuffer < StringBuilder

 5.面试题:
  阐述String 和 StringBuffer 和StringBuilder的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值