String&StringBuilder&StringBuffered

一、String

  • Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现,也就是说程序出现的字符串"abc"都是String类的对象;
  • 字符串是常量,它们的值在创建之后不能更改。
  • String 类包括的方法可用于检查序列的单个字符比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
private static void show1() {
        String name = "张三";// name就是String类的对象
        // name所代表的"张三"在内存是常量
        name.toString();// 对象可以调用方法

        name = "李四";// 这样,只是name这个变量不再引用"张三",而是引用"李四"
    }

1.1 构造方法

提供了很多种构造方法,以供使用各种方式创建字符对象.


  • String() // 创建一个空字符,是"",不是null
  • String(byte[] bytes)
  • String(char[] chars)
  • String(String original)
   private static void show2() {
        // 无参构造
        String s = new String( );
        // String s2 = ""; // 于上方等价
        System.out.println(s );

        // 将字节数组,转为字符串
        byte[] bytes = {65,66,67};
        String s3 = new String(bytes);
        System.out.println(s3 );
        // 一般会用在数据传输(IO) 网络通信

        // 将字符数组转字符串
        char[] chars = {'a','b','c'};
        String s4 = new String(chars);
        System.out.println(s4 );

        // 创建一个字符串副本
        // String s5 = new String("java");

        // 总结: 最常见的创建字符串的方式
        String s6 = "java";
    }

1.2 方法[重点]

查找类的方法

  • char charAt(int index) 返回指定索引处的 char 值。
  • int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。其实有很多重载的方法,可以传字符串
  • int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。
private static void show3() {
        // - char charAt(int index) 返回指定索引处的 char 值。
        // 根据下标找字符
        char c = "java".charAt(0);
        System.out.println(c );

        // - int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
        // 其实有很多重载的方法,可以传字符串
        // 找不到返回-1
        // 根据字符找下标
        // 场景: 可以用来判断是否包含
        int a = "java".indexOf('a');
        int a2 = "java".indexOf("cv");
        System.out.println(a2 );

        // - int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。
        System.out.println("java".lastIndexOf("a") );
        // 思考题: 找javaava中,第2个a,利用indexOf(String s,int fromIndex)方法
    }

判断类的方法

  • boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true
  • boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。
  • boolean startsWith(String prefix) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
  • boolean equals(Object anObject) 将此字符串与指定的对象比较。
  • boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
  • boolean isEmpty() 当且仅当 length() 为 0 时返回 true。
  private static void show4() {
        // - boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true
        System.out.println("java".contains("cv") );

        // - boolean endsWith(String suffix)  测试此字符串是否以指定的后缀结束。
        System.out.println("java".endsWith("a"));
        // 场景: 用来判断文件格式
        System.out.println("a.txt".endsWith("txt"));

        // - boolean startsWith(String prefix)  测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
        System.out.println("a.txt".startsWith("a") );

        // - boolean equals(Object anObject)  将此字符串与指定的对象比较。
        String a = "a";
        String a2 = "a";
        System.out.println(a.equals(a2) );
        // - boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
        System.out.println("JAVA".equals("java") );
        System.out.println("JAVA".equalsIgnoreCase("java") );

        // - boolean isEmpty()  当且仅当 length() 为 0 时返回 true。
        System.out.println("".isEmpty( ));
        System.out.println("java".isEmpty( ));
    }

转换类

  • byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
  • char[] toCharArray() 将此字符串转换为一个新的字符数组。
  • String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写
  • String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
  • static String valueOf(boolean b) 返回 boolean 参数的字符串表示形式。
    private static void show6() {
        // - byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
        byte[] bytes = "java".getBytes( );

        // - char[] toCharArray()  将此字符串转换为一个新的字符数组。
        char[] chars = "java".toCharArray( );

        // - String toLowerCase()  使用默认语言环境的规则将此 String 中的所有字符都转换为小写
        System.out.println("JAVA".toLowerCase() );

        // - String toUpperCase()  使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
        System.out.println("java".toUpperCase() );

        // - static String valueOf(boolean b)
        // 返回 boolean 参数的字符串表示形式。
        // 提供了多个重载方法,可以将大部分类型都转换成String
        // 注意,该方法是静态的
        String.valueOf(new Object());
    }

字符截取

  • String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
  • String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。

字符替换

  • String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
  • String replaceAll(String regex, String replacement)
private static void show7() {
        // String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
        String s = "java".substring(1);
        System.out.println(s );

        // String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。
        // endIndex 后面的下标不包含
        String s2 = "java".substring(1,3);

        // String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
        System.out.println("jav,av,av,a".replace("av","AV") );
        // String replaceAll(String regex, String replacement)
    }

其他方法

  • String concat(String str) 将指定字符串连接到此字符串的结尾。
  • int length() 返回此字符串的长度。
  • String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
  • String trim() 返回字符串的副本,忽略前导空白和尾部空白。
    public static void main(String[] args) {
        // - String concat(String str) 将指定字符串连接到此字符串的结尾。
        System.out.println("java".concat("bigdata") );
        // - int length()  返回此字符串的长度。
        System.out.println("java".length() );
        // - String[] split(String regex)  根据给定正则表达式的匹配拆分此字符串。
        String[] split = "java".split("");
        System.out.println(Arrays.toString(split));
        String[] split1 = "j-a-v-a".split("-");
        System.out.println(Arrays.toString(split1));
        // .是正则表达式的运算符,需要转义成字符.
        String[] split2 = "java从入门到精通.doc".split("\\.");
        System.out.println(Arrays.toString(split2));
        // 题目: 获得文件的后缀

        // - String trim()  返回字符串的副本,忽略前导空白和尾部空白。
        System.out.println("     java     ".trim( ));
    }

常用的

char charAt(int index)
int indexOf(int ch)
boolean equals(Object anObject)
String substring(int beginIndex)
int length()
String[] split(String regex)

二、StringBuffer&StringBuilder

2.1 StringBuffer

StringBuffer是字符串缓冲区,一个线程安全的,字符的可变序列
该类提供了一些方法可以改变字符串的长度和内容.

构造方法

  • StringBuffer() 构造一个没有字符的字符串缓冲区,并构造了16个字符的初始容量。
  • StringBuffer(CharSequence seq) 构建一个包含指定的 CharSequence相同字符的字符串缓冲区。
  • StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区,并构造指定的初始容量。
  • StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。

ps: 场景将来通过构造方法用于和String之间来回转换

        // 以指定字符串创建StringBuffer
        StringBuffer sb = new StringBuffer("java");
        System.out.println(sb );

方法

  • StringBuffer append(boolean b) 追加的 boolean参数序列的字符串表示形式
    ps: 有很多append的重载方法,用于追加大多数类型

  • StringBuffer delete(int start, int end) 删除的字符在字符串序列分析。

  • StringBuffer deleteCharAt(int index) 删除 char在指定的位置在这个序列。

  • StringBuffer insert(int offset, boolean b) 插入的 boolean参数的字符串表示形式进入这个序列。 ps: 参数2支持大部分类型

  • StringBuffer replace(int start, int end, String str) 在一个字符串中替换指定的 String字符这个序列的特征。

  • StringBuffer reverse() 使这个字符序列被序列的反转所取代。

  • void setCharAt(int index, char ch) 指定索引处的字符设置为 ch。

总结: 其实以上方法就是对字符串的CRUD…

    public static void main(String[] args) {

        // 以指定字符串创建StringBuffer
        StringBuffer sb = new StringBuffer("java");
        System.out.println(sb );

        // - StringBuffer append(boolean b) 追加的 boolean参数序列的字符串表示形式
        // ps: 有很多append的重载方法,用于追加大多数类型
        StringBuffer sb2 = sb.append("bigdata");
        System.out.println(sb );
        System.out.println(sb2 );

        // javabigdata
        // - StringBuffer delete(int start, int end)  删除的字符在字符串序列分析。
        sb.delete(4,7);
        System.out.println(sb );

        // javadata
        // - StringBuffer deleteCharAt(int index)    删除 char在指定的位置在这个序列。
        sb.deleteCharAt(4);
        System.out.println(sb );

        // javaata
        // - StringBuffer insert(int offset, boolean b) 插入的 boolean参数的字符串表示形式进入这个序列。 ps: 参数2支持大部分类型
        // ps: insert方法有10+多个重载的方法,可以插入大部分数据类型的数据
        // offset 偏移量
        sb.insert(4,"d");
        System.out.println(sb );

        // javadata
        // - StringBuffer replace(int start, int end, String str) 在一个字符串中替换指定的 String字符这个序列的特征。
        sb.replace(1,4,"AVA");
        System.out.println(sb );

        // jAVAdata
        // - void setCharAt(int index, char ch)  指定索引处的字符设置为 ch。
        sb.setCharAt(4,'D');
        System.out.println(sb );

        // StringBuffer reverse()    使这个字符序列被序列的反转所取代。
        StringBuffer buffer = new StringBuffer("java");
        buffer.reverse();
        System.out.println(buffer );

        // 练习
        int num = 12345;
        String s = String.valueOf(num);
        StringBuffer sb3 = new StringBuffer(s);
        sb3.reverse();
        String s1 = String.valueOf(sb3);
        int i = Integer.parseInt(s1);
        System.out.println(i );
    }

2.2 StringBuilder

StringBuilder 是可变字符序列,但是不保证线程安全.建议在单线程情况下使用,如果没有线程安全的要求,建议优先使用StringBuilder,因为操作字符串更快!!

常用的方法与StringBuffer中的效果完全一致,所以…

方法自行演示…


StringStringBufferStringBuilder
字符串是否可变不可以可以可以
线程安全安全安全不保证安全
字符串拼接效率最慢
版本1.01.01.5
    public static void main(String[] args) {
        long begin = System.currentTimeMillis( );// 可以当前系统毫秒值
        // StringBuilder sb = new StringBuilder("");
        // StringBuffer sb = new StringBuffer("");
        String sb = "";
        for (int i = 0; i < 100000; i++) {
            //sb.append("1");
            sb += "1";
        }
        long end = System.currentTimeMillis( );// 可以当前系统毫秒值

        System.out.println(end - begin );
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Su sir~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值