21个String方法和StringBuffer

本文介绍了Java中字符串频繁拼接可能导致的问题及解决方案,强调了StringBuffer和StringBuilder在性能优化上的应用。通过实例展示了如何使用这两个类进行字符串拼接,并讲解了它们的区别。此外,还列举并解释了String类的一些常用方法,如charAt、compareTo、contains、endsWith等,帮助读者更好地理解和运用Java字符串处理。
摘要由CSDN通过智能技术生成

2021.02.20
第14次记录。
昨天因单位事情耽误一天,未学习java。今天继续。
课堂笔记:
1.我们在实际开发中,如果需要进行字符串的频繁拼接,会造成什么问题?
因为java中的字符串是不可变的,每一次拼接都会产生新字符串。这样
会占用大量的方法区内存。造成内存空间的浪费。
如果以后需要进行大量字符串的拼接操作,建议使用JDK中自带的:
java.lang.StringBuffer
java.lang.StringBuilder
2.如何优化StringBuffer的性能?
在创建StringBuffer的时候尽可能给定一个初始化容量。
最好减少底层数组的扩容次数。预估计一下,给一个大一些初始化容量。
关键点:给一个合适的初始化容量。可以提高程序的执行效率
3.StringBuffer和StringBuilder的区别?
StringBuffer中的方法都有:synchronized关键字修饰,
表示StringBuffer在多线程环境运行下是安全的。
StringBuilder中的方法都没有synchronized关键字修饰,在多线程环境运行下是不安全的。

代码演示1:

public class StringBufferText01 {
    public static void main(String[] args) {
        StringBuffer stringbuffer = new StringBuffer();
        //拼接字符串,以后拼接字符串统一调用append()方法。append是追加的意思
        stringbuffer.append("我");
        stringbuffer.append("是");
        stringbuffer.append("中");
        stringbuffer.append("国");
        stringbuffer.append("人");
        System.out.println(stringbuffer);
        //制定初始化容量的StringBuffer对象(字符串缓冲区对象)
        StringBuffer sb = new StringBuffer(100);
        sb.append("hello ");
        sb.append("world, ");
        sb.append("hello ");
        sb.append("java");
        System.out.println(sb);
        //使用StringBuilder也可以完成字符串的拼接
        StringBuilder sb2 = new StringBuilder();
        sb2.append("hello ");
        sb2.append("world, ");
        sb2.append("hello ");
        sb2.append("java");
        System.out.println(sb2);
    }
}

输出结果:
我是中国人
hello world, hello java
hello world, hello java

代码演示2(包含课堂笔记):

public class StringTest04 {
    public static void main(String[] args) {
        //String类常用方法
        //1.charAt(int index) 返回 char指定索引处的值。
        char c = "中国人".charAt(1);
        System.out.println(c);
        //2.compareTo(String anotherString) 按字典顺序比较两个字符串。
        //字符串之间比较大小只能用compareTo
        System.out.println("abc".compareTo("abc")); //0
       int result =  "abcd".compareTo("abce"); //-1
        System.out.println(result);
        System.out.println("abce".compareTo("abcd")); //1
        //3.contains(CharSequence s) 判断前面的字符串是否包含后面的子字符串
        System.out.println("HelloWorld.java".contains(".java")); //true
        //4.endsWith(String suffix) 判断当前字符串是否以某个字符串结尾
        System.out.println("test.txt".endsWith("t")); //true
        System.out.println("test.txt".endsWith("a")); //false
        //5.equals
        System.out.println("abc".equals("A")); //false
        //6.equalsIgnoreCase(String anotherString) 判断两个字符串是否相等,并同时忽略大小写
        System.out.println("abc".equalsIgnoreCase("AbC"));
        //7.getBytes() 将字符串对象转换成字节数组
        byte[] bytes = "abcdef".getBytes();
        for (int i = 0; i < bytes.length; i++){
            System.out.println(bytes[i]);
        }
        //8.indexOf(String str) 判断某个子字符串在当前字符串中第一次出现处的索引
        System.out.println("ffdfasdasdasdwqrtf".indexOf("w"));
        //9.isEmpty() 判断某个字符串是否为空
        System.out.println("faf".isEmpty()); //false
        String str = "";
        System.out.println(str.isEmpty());  //true
        //10.int length()
        //注意:判断数组长度是length属性,判断字符串长度是length()方法
        System.out.println("abc".length()); //3
        //11.lastIndexOf(String str) 判断某个子字符串在当前字符串中最后一次出现的索引(下标)
        System.out.println("sfaafdxgedcxvddqwgfvdxc".lastIndexOf("c")); //22
        //12.String replace(CharSequence target, CharSequence replacement) 替换
        System.out.println("http://www.baidu.com".replace("http://", "https://"));
        //13.split(String regex) 拆分字符串
        String[] strs = "1990-11-29".split("-");
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
        //14.startsWith(String prefix) 判断某个字符串是否以某个子字符串开始的
        System.out.println("www.baidu.com".startsWith("w"));  //true
        //15.substring(int beginIndex) 截取字符串,参数是起始下标
        System.out.println("https://www.baidu.com".substring(8));
        //16.substring(int beginIndex, int endIndex)
        //beginIndex是起始位置(包括),endIndex(不包括)
        System.out.println("https://www.baidu.com".substring(8, 11));
        //17.char[] toCharArray() 将此字符串转换为新的字符数组。
        char[] chars = "我是中国人".toCharArray();
        for (int i = 0; i < chars.length; i++){
            System.out.println(chars[i]);
        }
        //18.toLowerCase()  转换为小写
        System.out.println("WangBa".toLowerCase());
        //19.toUpperCase()  转换为大写
        System.out.println("WangBa".toUpperCase());
        //20.trim() 去除字符串前后空白的
        System.out.println("   jidasji vj ojoj ojgw  ".trim());
        //21.String中只有一个方法是静态的不需要new对象
        //valueOf(boolean b) 将非字符串转换为字符串
        String s1 = String.valueOf(new C());
        System.out.println(s1);
    }
}
class C{
    @Override
    public String toString() {
        return "我是中国人";
    }
}

输出结果:

0
-1
1
true
true
false
false
true
97
98
99
100
101
102
13
false
true
3
22
https://www.baidu.com
1990
11
29
true
www.baidu.com
www





wangba
WANGBA
jidasji vj ojoj ojgw
我是中国人

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值