String 类的特点:

  • 字符串对象一旦被初始化就不会被改变.
//以下代码的区别:
String s = "abc"; // 在常量池中创建一个字符串对象, 池中没有就建立, 池中有,直接用. String s1 = new String("abc"); // 在堆内存中创建两个对象, 一个为 new 对象, 一个为字符串对象 "abc" System.out.println(s==s1); // false System.out.println(s.equals(s1)); // String 类中的equals()方法复写了 Object 类中的 equals()方法
// 比较的是字符串的内容, 不是地址

字符串的常见操作方法:

构造函数

  1. 转换
// 将数组(整体或部分)转换为字符串

byte[] arr = {65,66,67};
String s = new String(arr); // s=abc; char[] arr1 = {'a','b','c'};
String s1 = new String(arr1); // s=abc

一般方法

查找对象中的方法,需要确定两点: 返回值类型和参数类型

  1. 获取:
// 1.1 获取字符串中字符的个数(长度), 数组中长度为属性, 直接 array.length 获取即可
int length();
// 1.2 根据位置获取字符
char charAt(int index);
// 1.3 根据字符获取在字符串中第一次出现的位置. 另外, 可以根据 -1,来判断该字符或字符串是否存在
int indexOf(int ch); // 参数为 int, 表示支持 ASCII 码数值
int indexOf(int ch, int fromIndex); // 从指定位置进行查找 ch 第一次出现的位置
int indexOf(String str); // 查找字符串
int indexOf(String str, int fromIndex); // 从指定位置进行查找 str 第一次出现的位置 int lastIndexOf(int ch); //从后往前找 // 1.4 获取字符串中的一部分字符串, 包含 begin, 不包含 end, 返回子字符串对象
String substring(int beginIndex, int endIndex);
String substring(int beginIndex);
  1. 转换
// 2.1 将字符串转成字符串数组(字符串的切割)
String[] split(String regex); // 传递的是切割规则
// 2.2 将字符串转成字符数组
char[] toCharArray();
// 2.3 将字符串转成字节数组
byte[] getBytes();
// 2.4 将字符串中的字母转成大小写, 返回一个新字符串
String toUpperCase();
String toLowerCase();
// 2.5 将字符串中的内容进行替换
String replace(char oldchar, char newchar()); // 返回一个新的字符串.如果 oldchar 不存在于字符串中, 返回原字符串
String replace(String s1, String s2); // 替换字符串
// 2.6 去除字符串两边空格, 返回一个新的字符串
String trim();
// 2.7 将字符串进行连接
String concat(string);
  1. 判断
// 3.1  两个字符串内容是否相同
boolean equals(Object obj);
boolean equalsIgnoreCase(String str); // 忽略大写比较字符串内容
// 3.2 字符串中是否包含指定字符串
boolean contains(String str);
// 3.3 字符串是否以指定字符串开头, 是否以指定字符串结尾
boolean startsWith(String prefix);
boolean endsWith(String suffix);
  1. 比较
// 两个字符串的比较, 返回值为 整数类型
int compareTo(String anotherString);

求两个字符串中最大相同的子串

// "qwerabcdtyuiop" 和 "xcabcdvbn" 中最大相同的子串
// 思路:
// 1. 既然取得是最大子串, 先看短的那个字符串是否在长的那个字符串中.
// 如果存在, 短的那个字符串就是最大子串.
// 2. 如果不是, 那么就将短的那个子串进行长度递减的方式取子串, 去长串中判断是否存在,
// 如果存在就已找到, 就不用在找了. public static String getMaxSubstring(String s1, String s2){
for(int i = 0; i < s2.length(); i++){
for(int a = 0, b = s2.length()-i; b != s2.length()+1; a++,b++){
String sub = s2.substring(a, b);
if(s1.contains(sub))
return sub;
}
}
return null;
}

StringBuffer 类

  1. StringBuffer 就是字符串缓冲区
  2. 用于存储数据的容器
  3. 相比于数组, StringBuffer 的特点:
    • 长度是可变的
    • 可以存储不同类型的数据
    • 存储的数据最终要转成字符串进行使用
    • 可以对字符串进行修改
  4. 具备的功能,如下:
    1. 添加:

      StringBuffer append(data);  // 在末尾添加数据
      StringBuffer insert(int offset, data); // 指定位置插入任意数据
    2. 删除, 操作容器删除, 方法不外乎: delete, 或者 remove

      StringBuffer delete(int start, int end); // 包含头, 不包含尾
      StringBuffer deleteCharAt(int index); // 删除指定位置的元素
    3. 查找

      char charAt(index);
      int indexOf(String str);
      int lastIndexOf(String str);
    4. 修改

      StringBuffer replace(start, end, string); // 替换一段字符, 包含头, 包含尾
      void setCharAt(index, char); // 根据指定位置, 替换一个字符
      void setLength(); // 设置字符缓冲区长度, StringBuffer 的默认长度为 16 个字符
      StringBuffer reverse(); // 反转
  5. 可变数组的原理:

StringBuilder 类

  1. JDK 1.5 以后出现了功能和 StringBuffer 一模一样的对象, 就是 StringBuilder
  2. 两者的不同之处:
    • StringBuffer 是线程同步的, 安全.通常用于多线程
    • StringBuilder 是线程不同步的, 不安全. 通常用于单线程, 它的出现是为了提高效率, 因为不需要判断锁.

JDK 升级, 注重以下三点:

  1. 简化书写
  2. 提高效率
  3. 增加安全性





    参考资料

最新文章

  1. Swift与C#的基础语法比较
  2. HFS远程命令执行漏洞入侵抓鸡黑阔服务器
  3. 使用clearInterval清除计时循环时,最后一次循环还是会执行解决办法
  4. 关于spring中无法将service注入到servlet中的问题
  5. angular路由配置用法
  6. {&quot;集合已修改;可能无法执行枚举操作。&quot;}
  7. 2013年7月份第1周51Aspx源码发布详情
  8. lnmp的使用
  9. cakephp之查询
  10. 双向链表JAVA代码
  11. Android手机fastboot刷机命令
  12. 使用关系型数据库作为Redis落地的思路
  13. 从__acrt_first_block == header 谈起,记录dll链接不一致的问题
  14. [模板]KMP算法
  15. C#什么时候需要使用构造函数
  16. 各种uml图
  17. hdu 4937 base进制只含3456的base数
  18. FIFO IP核
  19. shell 命令总结
  20. mfc 类成员函数

热门文章

  1. Atitit.常用分区api的attilax总结
  2. TomEE
  3. 关于Qt半自动内存管理的思考及实验
  4. CSS Sprites的概念、原理、适用范围和优缺点
  5. myeclipce怎么破解
  6. Android之2D图形(圆、直线、点)工具类 (持续更新)
  7. jqgrid删除多行数据,删不全的解决方案
  8. java模拟从http上下载文件
  9. Linux多条指令之间;和&amp;&amp;
  10. Android Intent 用法全面总结(转载)