Java——String类的方法

Java——String类的方法

String str1 = “abc” 与String str2 = new String(“abc”)有什么区别?

  • 字符串常量存储在字符串常量池,目的是共享
  • 字符串非常量对象存储在堆中
    在这里插入图片描述

String的常用方法

常用方法1:

  • int length():返回字符串的长度return value.length
String str = "abcdefghijklmn";
System.out.println(str.length());
/*输出结果:14*/
  • char charAt(int index):返回某索引处的字符return value[index]
String str = "abcdefghijklmn";
System.out.println(str.charAt(13));
/*输出结果:n*/
  • boolean isEmpty():判断是否是空字符串return value.length == 0
String str = "abcdefghijklmn";
System.out.println(str.isEmpty());
/*输出结果:false*/
/*为空返回true,不为空返回false*/
  • String toLowerCase():使用默认语言环境,将String中的所有字符转换成小写
String str = "AbcdefghijklmN";
System.out.println(str.toLowerCase());
/*输出结果:abcdefghijklmn*/
  • String toUpperCase():使用默认语言环境,将String中的所有字符转换成大写
String str = "AbcdefghijklmN";
System.out.println(str.toUpperCase());
/*输出结果:ABCDEFGHIJKLMN*/
  • String trim():返回字符串的副本,忽略前导空白和尾部空白(中间的空白不能忽略)
String str = "     AbcdefghijklmN     ";
System.out.println(str.trim());
/*输出结果:AbcdefghijklmN*/
  • boolean equals(Object obj):比较字符串的内容是否相同
String str = "AbcdefghijklmN";
System.out.println(str.equals("abcdefghijklmN"));
/*输出结果:false*/
  • boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String str = "AbcdefghijklmN";
System.out.println(str.equalsIgnoreCase("abcdefghijklmN"));
/*输出结果:true*/

  • String concat(String str):将指定字符串连接到此字符串的结尾。等价于“+”
String str = "AbcdefghijklmN";
System.out.println(str.concat("abcdefghijklmN"));
/*输出结果:AbcdefghijklmNabcdefghijklmN*/
  • int compareTo(String anotherString):比较两个字符串的大小
String str = "Ac";
System.out.println(str.compareTo("Ab"));
/*输出结果:1*/


String str = "Ab";
System.out.println(str.compareTo("Ab"));
/*输出结果:0*/

String str = "Ab";
System.out.println(str.compareTo("Ad"));
/*输出结果:-2*/
  • String substring(int beginIndex):返回一个新的字符串,它是此字符串从deginIndex开始到最后一个字符结束的一个子字符串
String str = "abcdefghijklmN";
System.out.println(str.substring(2));
/*输出结果:cdefghijklmN*/
  • String substring(int beginIndex,int endIndex):返回一个新的字符串,它是此字符串的从begin开始,截取到endIndex(不包含)的一个子字符串
String str = "abcdefghijklmN";
System.out.println(str.substring(2,9));
/*输出结果:cdefghi
不包含str[9]
*/

常用方法2:

  • boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
String str = "abcdefghijklmN";
System.out.println(str.endsWith("lmN"));
/*输出结果:true*/
  • boolean startsWith(String prefix):测试此字符串是否以指定的前缀结束
String str = "abcdefghijklmN";
System.out.println(str.startsWith("abb"));
/*输出结果:false*/
  • boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
String str = "abcdefghijklmN";
System.out.println(str.startsWith("de",3));
/*输出结果:true*/
  • boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true
String str = "abcdefghijklmN";
System.out.println(str.contains("hi"));
/*输出结果:true*/
  • int indexOf(String str):返回指定子字符串在此字符串中第一次出现的索引,从指定的索引开始
String str = "lllllabcdeabcdeabcsde";
System.out.println(str.indexOf("abcs"));
/*输出结果:15*/
  • int lastIndexOf(String str):返回指定字符串在此字符串中最右边出现处的索引
String str = "abcdeabcdeabcde";
System.out.println(str.lastIndexOf("abcde"));
/*输出结果:10*/

常用方法3:

  • String replace(char oldChar,char newChar):返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的
String str = "abcd abcd abcd csdn csdn adcc";
System.out.println(str.replace("abcd", "csdn"));
/*输出结果:csdn csdn csdn csdn csdn adcc*/
  • String replaceAll(String regex,String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

  • boolean matches(String regex):告知此字符串是否匹配给定的正则表达式

  • String[] split(String regex):根据正则表达式的匹配拆分此字符串

  • String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中

public static void main(String[] args){
	String s = "Hello";
	s += " World";
	System.out.println(s);
}

在这里插入图片描述


如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。如何解决这个问题???可以通过Java提供的StringBuilder类来解决。

StringBuilder和StringBuffer

StringBuilder是一个可变的字符串类,可以把它看成一个容器,这里的可变是指StringBuilder对象中的内容是可变的,可以对字符串内容进行增删,它做字符串拼接的时候是不会创建一个新的对象的

String的内容是不可变的
StringBuilder内容是可变的,StringBuffer内容是可变的在这里插入图片描述

StringBuffer常用的方法:

  • StringBuffer append(xxx):进行字符串拼接
StringBuffer bf = new StringBuffer("lll");
System.out.println(bf.append("sss"));
/*输出结果:lllsss*/
  • StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer bf = new StringBuffer("aaaasssscccc");
System.out.println(bf.delete(4, 8));
/*输出结果:aaaacccc
不包括bf[8]*/
  • StringBuffer replace(int start,int end,String str):把[start,end]位置替换为str
StringBuffer bf = new StringBuffer("aaaasssscccc");
System.out.println(bf.replace(4, 8, "bbbb"));
/*输出结果:aaaabbbbcccc*/

StringBuffer bf = new StringBuffer("aaaasssscccc");
System.out.println(bf.replace(4, 8, "bb"));
/*输出结果:aaaabbcccc*/
  • StringBuffer insert(int offset,xxx):在指定位置插入xxx
  • StringBuffer reverse():把当前字符序列逆转
String字符串拼接、StringBuffer、StringBuilder三者效率测试
package string;


public class StringDemo06 {

    public static void stringJoin() {
        long startTime = System.currentTimeMillis();
        String s = "";
        for(int i=0;i<10000;i++) {
            s = s + "Hello";
            s = s + "World";
            s = s + "Hello";
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用String进行字符串拼接用时(毫秒):"+(endTime - startTime));
    }
    
    public static void stringBufferJoin() {
        StringBuffer strBuffer = new StringBuffer("");
        long startTime = System.currentTimeMillis();
        for(int i=0;i<10000;i++) {
            strBuffer.append("Hello");
            strBuffer.append("World");
            strBuffer.append("Hello");
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用StringBuffer进行字符串拼接用时(毫秒):"+(endTime - startTime));
    }
    
    public static void stringBuilderJoin() {
        StringBuilder strBuilder = new StringBuilder();
        long startTime = System.currentTimeMillis();
        for(int i=0;i<10000;i++) {
            strBuilder.append("Hello");
            strBuilder.append("World");
            strBuilder.append("Hello");
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用StringBuilder进行字符串拼接用时(毫秒):"+(endTime - startTime));
    }
    public static void main(String[] args) {
        //String拼接字符串用时
        stringJoin();
        //StringBuffer拼接字符串用时
        stringBufferJoin();
        //StringBuilder拼接字符串用时
        stringBuilderJoin();
    }
}

运行结果:
在这里插入图片描述


总结:StringBuffer与StringBuilder的区别
  1. StringBuffer:可变字符序列、效率低、线程安全、多线程操作字符串缓冲区下操作大量数据用StringBuffer
  2. StringBuilder:可变字符序列、效率低、线程不安全、单线程操作字符串缓冲区下操作大量数据用StringBuilder
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值