String 类的特点:

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

字符串的常见操作方法:

构造函数

  1. 转换
  1. // 将数组(整体或部分)转换为字符串
  2. byte[] arr = {65,66,67};
  3. String s = new String(arr); // s=abc;
  4. char[] arr1 = {'a','b','c'};
  5. String s1 = new String(arr1); // s=abc

一般方法

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

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

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

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

StringBuffer 类

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

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

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

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

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

StringBuilder 类

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

JDK 升级, 注重以下三点:

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





    参考资料

Java 常用工具类之 String 类的更多相关文章

  1. JavaEE-实验一 Java常用工具类编程

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

  2. Java的常用类——Object类、String类

    Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...

  3. Java Object类 和 String类 常见问答 6k字+总结

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  4. Java学习笔记19(String类)

    String代表字符串,在Java中,所有的字符串字面值都作为此类的实例实现 字符串的特点以及简单的原理分析: package demo; /* * String类的特点: * 所有的"&q ...

  5. Java中字符数组、String类、StringBuffer三者的相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...

  6. C#中 StringBuilder类 与 String类的区别---(转)

      在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...

  7. Hadoop: Text类和String类的比较

    一般认为Text类和String类是等价的,但二者之间其实存在着不小差别: 以<Hadoop权威指南>中的案例为例,给定字符串  String s = "\u0041\u00DF ...

  8. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  9. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面     本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...

随机推荐

  1. 由上而下层层剖析细说PCI+ExpresS+11新版精髓

    https://wenku.baidu.com/view/9a16c41fa300a6c30c229f87.html

  2. Python 常用内置模块(加密模块 hashlib,Base64)

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...

  3. 算法提高 道路和航路 SPFA 算法

    我简单的描述一下题目,题目中所说的有道路和航路: 1.公路是双向的,航路是单向的: 2.公路是正值,航路可正可负: 每一条公路i或者航路i表示成连接城镇Ai(1<=A_i<=T)和Bi(1 ...

  4. 李洪强和你一起学习前端之(8)CSS复习

    今天是2017年3月24日周五 每一天都是余生当中最好的一天,珍惜当下. CSS基础复习 1 复习 1.1Css第一天 css层叠样式表 基础选择器 标签选择器 p{属性: 值;} 类选择器 .自定义 ...

  5. 27. Retrofit2 -- How to Use Dynamic Urls for Requests

    27. Retrofit2 -- How to Use Dynamic Urls for Requests Retrofit tutorial 用户案例场景 如何使用动态 Url 相对于基本地址,动态 ...

  6. hdu6053 TrickGCD 容斥原理

    /** 题目:hdu6053 TrickGCD 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6053 题意:You are given an array ...

  7. Nginx配置教程

    1. Nginx相关概念 1.1 反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返 ...

  8. ios-A+B经典问题

    // // main.m // a+b // #import <Foundation/Foundation.h> #import "Calcultor.h" int m ...

  9. journal size

    resize2fs命令出现这个错误“resize2fs: Operation not permitted While trying to add group #6656”,并且在/var/log/me ...

  10. java Thread方法解析: sleep join wait notify notifyAll

    转载自: sleep(),yield(),wait()区别详解:http://dylanxu.iteye.com/blog/1322066 join方法详解:http://www.open-open. ...