JAVA_String

字符串对象创建后不能被改变

String s = "asd";
String s1  = "asd";
String s2 = new String("asd")
System.out.println(s==s1);         // true
System.out.println(s==s2);          // false
System.out.println(s.equals(s2);     // true 

字符串存储在字符串常量池中,首先来到s他在常量池里找有没有abc,没有则创建一个然后把地址给s。之后s1来在常量池里发现有abc,则把s的地址给s1,所以他俩一模一样

s2是在堆内存中创建的,不一样

String类中的equals复写了Object中的,只比较内容,不比较地址

构造函数

String(byte[] arr): 将数组元素拼接成字符串

byte[] arr = {'a', 67, 68, 69};
String s = new String(arr);
System.out.println(s);    // aCDE

String(char[], int offset, int length): 从数组中的offset角标取,取length个拼成字符串

char[] arr = {'a', 'w', 'g', 'u'};
String s = new String(arr, 1, 3);
System.out.println(s);     // wgu

字符串操作

  1. s.charAt(int index) 获取s中index角标的字符

  2. s.indexof(int ch) 返回s中第一次出现ch的角标 没找到返回-1

  3. s.indexof(int ch, int fromIndex) 返回从s中指定位置开始第一次出现ch的角标

  4. s.indexof(String str) 返回s中第一次出现str的角标

  5. s.indexof(String str, int fromIndex) 返回从s中指定位置开始第一次出现str的角标

  6. s.lastIndexof 四种参数形式同上 改成最后一次出现/从指定位置从后往前找

  7. s.substring(int begin, int end) 返回子串, 左闭右开

  8. s.substring(int begin) 返回子串

  9. s.split(String regex) 参数是字符串,支持正则表达式,分割后的元素放在数组中

  10. s.toCharArray() 将字符串转换为字符数组

  11. String s = "asni";
    byte[] b = s.getBytes(); //将字符串转换为字节数组
    

    输出97 115 110 105

  12. s.toUpperCase()/s.toLowerCase() 不改变原字符串

  13. s.replace(char old, char new) 用new替换old,如果s中没有old字符则不变

    String s = "asni";
    String s1 = s.replace('q','d');
    System.out.println(s==s1);   //输出true,若把q改为a输出false
    
  14. s.replace(String old, String new) 字符串替换

  15. s.trim() 去除s两端空格

  16. s.concat(String s1) 将s1连接到s后面

  17. s.equalsIgnoreCase(String s1) 忽略大小写判断俩字符串相等

  18. s.contains(String str) s中是否包含str ,其实和indexof一样,不包含就返回-1

  19. s.startsWith(String str)/s.endsWith(String str) 是否以指定字符串开头/结尾

  20. s.compareTo(String str) 按字典顺序比较,等返回0,s大返回正数,否则负数

StringBuffer

字符串缓冲区,是用来存储数据的容器

特点:1.长度可变 2.可以存不同类型的数据 3.最后转成字符串

构造函数StringBuffer(),构造一个不带字符的缓冲区,初识容量为16个字符

方法

返回的都是StringBuffer对象

  1. sb.append(ElementType e) 将e添加到sb中
StringBuffer sb = new StringBuffer();
sb.append(4).append(false); //sb变成4false
  1. sb.insert(int offset, ElementType e) 在offset角标插入e
sb.append("haha");
sb.insert(1,"sht");
System.out.println(sb);   // hshtaha
  1. sb.delete(int start, int end) 删除,左闭右开

    sb.delete(0, sb.length()) 清空

  2. sb.deleteCharAt(int index) 删除指定位置元素

  3. sb.charAt(int index)

  4. sb.indexof(String)/sb.lastIndexof(String)

  5. sb.replace(int start, int end, String s) 用s替换start~end,左闭右开

  6. sb.setCharAt(int index, char c) 将index角标替换为c

  7. sb.setLength(int length) 设置缓冲区长度

  8. sb.reverse() 反转

StringBuilder与StringBuffer操作一模一样,但是StringBuffer是线程安全(同步)的,而StringBuilder是未同步的,速度更快。比如StringBuffer在插入时就不能查找,每次都要判断锁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值