• Java 常用工具类之 String 类


    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. 增加安全性




      参考资料
  • 相关阅读:
    JAVA中handleEvent和action的区别
    Hessian的使用以及理解
    Java基础中的RMI介绍与使用
    Callable与Runable接口 submit与execute区别
    XXL-JOB原理--定时任务框架简介(一)
    11.并发包阻塞队列之LinkedBlockingQueue
    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
    正确实现用spring扫描自定义的annotation
    自贡进入“刷脸卡”时代 人脸识别支付“黑科技”现身自流井老街
    谷歌最新研究:量子计算机能在8小时内破解2048位RSA加密
  • 原文地址:https://www.cnblogs.com/linkworld/p/7486685.html
Copyright © 2020-2023  润新知