【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

发布时间:2022-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

⭐️前面的话⭐️

本篇文章带大家认识Java基础知识——字符串类,在前面我们已经知道何在Java中定义字符串和字符串常量池,本文将介绍Java字符串中的常用的方法以及StringBuilder。

📒博客主页F1a;未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由未见花闻原创CSDN首发! 📆首发时间:🌴2021年12月3日🌴 ✉️坚持和努力一定能换来诗与远方! 💭参考书籍:📚《Java核心技》,📚《Java编程思想》,📚《Effective Java》 💬参考在线编程网站:🌐牛客网🌐力扣 博主的码gITee,平常博主写的程序代码都在里面。 博主的github,平常博主写的程序代码都在里面。 🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


📌导航小助手📌

  • 1.字符,字节与字符串
    • 1.1字符与字符串
    • 1.2字节与字符串
  • 2.字符串的基本操作与方法
    • 2.1字符串比较
    • 2.2字符串查找
    • 2.3字符串替换
    • 2.4字符串拆分
    • 2.5字符串截取
    • 2.6字符串其他常用的操作方法
  • 3.StringBuilder 与 StringBuffer
    • 3.1StringBuilder 与 StringBuffer的区别
    • 3.2StringBuilder拼接字符串
    • 3.3StringBuilder相比String特有的方法
  • 4.留给读者的练习


【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder


1.字符,字节与字符串

1.1字符与字符串

序号方法名类型描述
1public String(char value[])构造方法字符数组中所有的内容变成字符串
2public String(char value[], int offset, int count)构造方法将字符数组中的部分内容变成字符串 ,从索引offset开始,转换字符个数为count
3public char charAt(int index)普通方法取得指定索引位置的字符,索引从0开始
4public char[] toCharArray()普通方法将字符串转换成字符数组
import java.util.Arrays;

public class test5 {
    public static void main(String[] args) {
        char[] chArr = {'a', 'b', 'c', 'd', 'e'};
        String str1 = new String(chArr);
        System.out.PRintln(str1);
        String str2 = new String(chArr, 2,2);
        System.out.println(str2);
        System.out.println(str1.charAt(3));
        char[] arr = str1.toCharArray();
        System.out.println(Arrays.toString(arr));
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

1.2字节与字符串

序号方法名类型描述
5public String(byte bytes[])构造方法字节数组中所有内容变成字符串
6public String(byte bytes[], int offset, int length)构造方法将字节数组中部分内容变为字符串
7public byte[] getBytes()普通方法将字符串转换成字节数组
8public byte[] getBytes(String charsetName) throws UnsupportedEncodingException普通方法编码转换处理

这四个方法要注意最后一个方法,参数charsetName只的是编码格式,常见的编码格式有utf-8gbk等,除了这一点,还要注意使用该方法需要添加异常。

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

怎么添加呢?点击带红色波浪线的方法名,Alt + 回车,会出现一个弹窗:

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

选择第一个回车就可以了。(注:这是编译器IDEA的操作方法,还可以直接在代码最前面导入:import java.io.UnsupportedEncodingException;并在main方法后添加throws UnsupportedEncodingException)

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

最后一个方法会根据提供的编码格式,编码成不同的字节数组,utf-8gbk在编码英文字符是一样的,除英文字符外,编码就不相同了。

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Test6 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte[] bytes = {97,98,99,100,101,102,103};
        String str1 = new String(bytes);
        System.out.println(str1);
        String str2 = new String(bytes, 2, 3);
        System.out.println(str2);
        byte[] arr = str1.getBytes();
        System.out.println(Arrays.toString(arr));
        String str3 = "wjhw";
        String str4 = "未见花闻";
        System.out.println(Arrays.toString(str3.getBytes("utf-8")));//全英文字符串转字节编码,utf-8
        System.out.println(Arrays.toString(str3.getBytes("gbk")));//全英文字符串转字节编码,gbk
        System.out.println(Arrays.toString(str4.getBytes("utf-8")));//全中文字符串转字节编码,utf-8
        System.out.println(Arrays.toString(str4.getBytes("gbk")));//全英中文符串转字节编码,gbk
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

2.字符串的基本操作与方法

2.1字符串比较

序号方法名类型描述
9public boolean equals(Object anObject)普通方法判断字符串内容是否相等
10public boolean equalsIgnoreCase(String anotherString)普通方法忽略大小写,判断字符串是否相等
11public int compareTo(String anotherString)普通方法比较两个字符串大小
12public int compareToIgnoreCase(String str)普通方法忽略大小写,比较两个字符串大小
public class Test7 {
    public static void main(String[] args) {
        String str1 = "abcdef";
        String str2 = "aBcDEf";
        System.out.println(str1.equals("abcdef"));//true
        System.out.println(str1.equals("abef"));
        System.out.println("============");
        System.out.println(str1.equals(str2));//false
        System.out.println(str1.equalsIgnoreCase(str2));//true
        System.out.println("============");
        String str3 = "ca68";
        System.out.println(str3.compareTo("ca68"));
        System.out.println(str3.compareTo("da68"));
        System.out.println(str3.compareTo("ca67"));
        System.out.println(str3.compareTo("ca688"));
        System.out.println(str3.compareTo("ca6"));
        System.out.println(str3.compareToIgnoreCase("CA68"));
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

c o m p a r e T o ( ) compareTo() compareTo()是一个可以区分大小关系的方法,是String方法里是一个非常重要的方法。 字符串的比较大小规则, 总结成三个字 “字典序” 相当于判定两个字符串在一本词典的前面还是后面. 先比较字符串长度,如果相同再比较第一个字符的大小(根据 unicode 的值来判定), 如果不分胜负, 就依次比较后面的内容。

2.2字符串查找

序号方法名类型描述
13public boolean contains(CharSequence s)普通方法判断一个字符串中是否包含子串
14public int indexOf(String str) public int indexOf(int ch)普通方法从头开始查找指定字符串(字符)在字符串中的位置,查到了返回指定位置的开始索引,没有查找到返回-1
15public int indexOf(String str, int FromIndex) public int indexOf(int ch, int fromIndex)普通方法从指定索引位置开始查找指定字符串(字符在字符串中的位置,查到了返回指定位置的开始索引,没有查找到返回-1
16public int lastIndexOf(String str) public int lastIndexOf(int ch)普通方法从后向前查找指定字符串(字符)的位置
17public int lastIndexOf(String str, int fromIndex)public int indexOf(int ch, int fromIndex)普通方法从指定位置由后向前查找指定字符串(字符)位置
18public boolean startsWith(String prefix)普通方法判断字符串是否以指定字符串开头
19public boolean startsWith(String prefix, int toffset)普通方法判断指定位置字符串是否以指定字符串开头
20public boolean endsWith(String suffix)普通方法判断是否以指定字符串结尾
public class Test8 {
    public static void main(String[] args) {
        String str1 = "weijianhuawen";
        System.out.println(str1.contains("wei"));//true
        System.out.println(str1.contains("weihua"));//false
        System.out.println("============");
        System.out.println(str1.indexOf("jian"));//3
        System.out.println(str1.indexOf("hua"));//7
        System.out.println(str1.indexOf("wjhw"));//-1
        System.out.println(str1.indexOf('e'));//1
        System.out.println(str1.indexOf('u'));//8
        System.out.println("=============");
        System.out.println(str1.indexOf("hua", 7));//7
        System.out.println(str1.indexOf("jian", 7));//-1
        System.out.println(str1.indexOf('e', 1));//1
    }
}

@H_406_1709@

public class Test9 {
    public static void main(String[] args) {
        String str2 = "shiyuyuanfang";
        System.out.println(str2.lastIndexOf("yuan"));//5
        System.out.println(str2.lastIndexOf('a'));//10
        System.out.println(str2.lastIndexOf("yu", 5));//5
        System.out.println(str2.indexOf('a', 8));//10
        System.out.println("============");
        System.out.println(str2.startsWith("shi"));//true
        System.out.println(str2.startsWith("yuan"));//false
        System.out.println(str2.startsWith("yuan", 5));//true
        System.out.println(str2.endsWith("fang"));//true
        System.out.println(str2.endsWith("yuan"));//false
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

2.3字符串替换

序号方法名类型描述
21public String replaceAll(String regex, String replacement)public String replace(CharSequence target, CharSequence replacement)普通方法替换字符串中所有指定的内容
22public String replaceFirst(String regex, String replacement)普通方法替换字符串中第一次出现的指定内容

String类实现了CharSequence接口,所以使用public String replace(CharSequence target, CharSequence replacement) 方法也能接受String型的参数。

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

public class test10 {
    public static void main(String[] args) {
        String str = "Wisdom comes from diligence, and greatness comes from the ordinary";
        System.out.println(str.replaceAll("from", "于"));//得到的一个新对象,不会修改源字符串内容
        System.out.println(str);
        System.out.println(str.replace("from", "源于"));//得到的一个新对象,不会修改源字符串内容
        System.out.println(str);
        System.out.println(str.replaceFirst("from", "源于"));//得到的一个新对象,不会修改源字符串内容
        System.out.println(str);
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串。

2.4字符串拆分

序号方法名类型描述
23public String[] split(String regex)普通方法以指定字符串为标记将字符串全部拆分
24public String[] split(String regex, int limit)普通方法以指定字符串为标记将字符串部分拆分,其中limit为新生成字符串数组的最大长度
import java.util.Arrays;

public class Test11 {
    public static void main(String[] args) {
        String str = ";my email is weijianhuawen@163.COM";
        String[] arr1 = str.split(" ");
        System.out.println(Arrays.toString(arr1));
        String[] arr2 = str.split("@");
        System.out.println(Arrays.toString(arr2));
        String[] arr3 = str.split(" |@|\.");//有多个分隔符,可以使用|链接
        System.out.println(Arrays.toString(arr3));
        String[] arr4 = str.split("");
        System.out.println(Arrays.toString(arr4));//没有分隔符,将字符串全部分开
        //多个分隔符分割还可以以多次分割的形式分开
        String[] res = str.split("@");
        for (int i = 0; i < res.length; i++) {
            String[] temp = res[i].split(" ");
            for (int j = 0; j < temp.length; j++) {
                System.out.print(temp[j] + " ");
            }
        }
        System.out.println();
        String[] arr5 = str.split(" ", 2);
        System.out.println(Arrays.toString(arr5));
        String[] arr6 = str.split(" ", 3);
        System.out.println(Arrays.toString(arr6));
        String[] arr7 = str.split(" ", 4);
        System.out.println(Arrays.toString(arr7));
        String[] arr8 = str.split(" ", 100);//如果数组限制数超过实际最大分割字符串的数组长度,将输出实际分割的长度最大的字符串数组
        System.out.println(Arrays.toString(arr8));
        String str2 = "djfj\j\p\]a";
        System.out.println(Arrays.toString(str2.split("\\")));//由于是特殊字符需要\\才能表示一个普通的
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

注意事项:

  1. 字符"|","*","+“都得加上转义字符,前面加上”".
  2. 而如果是"",那么就得写成"\\".
  3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

2.5字符串截取

序号方法名类型描述
25public String substring(int beginIndex)普通方法从指定位置截取字符串到结尾
26public String substring(int beginIndex, int endIndex)普通方法截取字符串指定区间的内容,左闭右开
public class Test12 {
    public static void main(String[] args) {
        String str = "weijianhuawen";
        System.out.println(str.substring(3));
        System.out.println(str.substring(7));
        System.out.println(str.substring(0, 3));//左闭右开
        System.out.println(str.substring(7, 10));
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

2.6字符串其他常用的操作方法

序号方法名类型描述
27public String trim()普通方法去除字符串左右两边的空格,保留字符串中间的空格
28public String toLowerCase()普通方法将字符串中所有的字母转成小写
29public String toUpPErCase()普通方法将字符串中所有的字母转成大写
30public native String intern()普通方法字符串手动入池
31public String concat(String str)普通方法字符串拼接,相当于“+”,不会自动入池
32public int length()普通方法获取字符串长度
33public boolean iSEMpty()普通方法判断字符串是否是空字符串(不是null,而是长度为0的字符串)
public class Test {
    public static void main(String[] args) {
        String str1 ="     I hava a pen.       ";
        System.out.println(str1.trim());
        System.out.println("============");
        String str2 = "apple";
        System.out.println(str2.toUpperCase());
        System.out.println("============");
        String str3 = "APP";
        System.out.println(str3.toLowerCase());
        System.out.println("============");
        String str4 = "weijianhuawen";
        System.out.println(str4.length());
        System.out.println("============");
        String str5 = "cs";
        String str6 = "dn";
        System.out.println(str5.concat(str6));
        System.out.println("============");
        String str7 = "";
        System.out.println(str7.isEmpty());
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

3.StringBuilder 与 StringBuffer

3.1StringBuilder 与 StringBuffer的区别

任何字符串常量都是String类,该类的对象内容是不可以修改的,为了方便字符串的修改,Java提供了StringBuilder和StringBuffer,这两个类与String类是不相同的,也没有继承关系,所以String类引用是不能接收StringBuilder和StringBuffer对象的,同理StringBuilder和StringBuffer引用也不能接收String类对象。

对于StringBuilder和StringBuffer两者大同小异,前者未同步处理,适合在单线程下使用,后者采用线程同步,适合在多线程下使用。这一点在源码上有体现:

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

在StringBuffer中,区别与StringBuilder,每个方法前面有一个synchronized修饰,该关键字表示线程同步,起到上锁解锁的作用,保证多线程安全。除了这一点,其他的方面StringBuilder 与 StringBuffer都是一样的,所以本文全部以StringBuilder为例,StringBuffer用法和StringBuilder一模一样。

3.2StringBuilder拼接字符串

在进行字符串的拼接的时候,由于字符串是不可变的,会先将Sting类转换成StringBuilder类,然后利用StringBuilder类的append方法,将字符串拼接起来,这里的拼接不是形成一个新对象,而是在原有对象上修改,最后会自动将StringBuilder类的字符串通过toString方法转换成String类,这时候得到的是一个新的字符串对象。

public class Test1 {
    public static void main(String[] args) {
        String str1 = "xue";
        String str2 = "xi";
        String str = str1 + str2;
        System.out.println(str);
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

这也就是说使用+号拼接字符串,需要new对象,如果有很多的字符串或字符需要拼接,每一次拼接都需要new一个StringBuilder对象和String对象,这样就会产生大量的对象,那程序的性能肯定会受到影响,而使用StringBuilder类的append方法就能解决该问题,因为使用StringBuilder类的append方法并不会产生新对象,减少了对象的产生,自然性能也得到了优化。 看下面一段代码,由于不断拼接,产生了多个新对象:

public class Test13 {
    public static void main(String[] args) {
        String str = "abc";
        for (int i = 1; i <= 9; i++) {
            str += i;
        }
        System.out.println(str);
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

通过反编译,上述代码相当于:

public class Test14 {
    public static void main(String[] args) {
        String str = "abc";
        for (int i = 1; i <= 9; i++) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(str);
            stringBuilder.append(i);
            str = stringBuilder.toString();
        }
        System.out.println(str);
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

每进入一次循环,都new了一个新对象。如果我们会自己使用StringBuilder类,可以将这个代码优化为:

public class Test15 {
    public static void main(String[] args) {
        String str = "abc";
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(str);
        for (int i = 1; i <= 9; i++) {
            stringBuilder.append(i);
        }
        str = stringBuilder.toString();
        System.out.println(str);
    }
}

将程序优化后,只产生了一个新对象,程序的开销大大减少。

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

String和StringBuffer最大的区别在于: String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的情况考虑使用StingBuffer。

3.3StringBuilder相比String特有的方法

我们先来从源码上入手,StringBuilder本质上也是一个字符数组,但是它的权限是包访问(默认)权限,没有final关键字修饰,证明了StringBuilder类是可变的。 将 S t r i n g String String S t r i n g B u i l d e r StringBuilder @H_512_4050@StringBuilder有两种方法:

  1. 使用带参数的 S t r i n g B u i l d e r StringBuilder StringBuilder的构造方法,将字符串作为参数。
  2. 调用 S t r i n g B u i l d e r StringBuilder StringBuilder a p p e n d append append方法。

相反 S t r i n g B u i l d e r StringBuilder StringBuilder S t r i n g String String可以调用 S t r i n g B u i l d e r StringBuilder StringBuilder t o S t r i n g toString toString方法。

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

public class Test16 {
    public static void main(String[] args) {
        StringBuilder stringBuilder1 = new StringBuilder("weijianhuawen");
        System.out.println(stringBuilder1.toString());
        stringBuilder1.delete(7,10);//删除hua ,区间是左闭右开
        System.out.println(stringBuilder1.toString());
        System.out.println("============");
        StringBuilder stringBuilder2 = new StringBuilder("nature");
        System.out.println(stringBuilder2.toString());
        stringBuilder2.insert(6,2021);//在最后插入2021
        System.out.println(stringBuilder2.toString());
        System.out.println("============");
        StringBuilder stringBuilder3 = new StringBuilder("csdn");
        System.out.println(stringBuilder3.toString());//逆序字符串
        System.out.println(stringBuilder3.reverse().toString());
    }
}

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

4.留给读者的练习

最近有同学问了我一道相关字符串的习题,现将这道习题分享给大家,以巩固相关字符串的知识:

从键盘中输入一个字符串,如果输入的字符串中有除了数字、字母以外的其他符号,则输出提示信息"输入的数据不符合条件,请重新输入新的字符串!",直至输入符合的字符串。如果满足条件,输入提示信息"输入的数据符合条件",并实现如下功能∶ 1、将所有字符数字保存到字符串s1中并输出,统计出字符数字的个数。 2、将所有字母保存到字符串s2中并输出,统计出字母的个数。 3、使用concat()方法将字符串s2拼接到字符串s1后形成新的字符串s3,并输出。 4、使用substring()方法截取子串,子串保存到字符串s4。 5、使用toLowerCase()方法将字符串s3中所有大写字符转换为小写,保存到字符串s5。 6、使用equals()方法比较s3和s5两个字符串是否相等。思考∶若忽略大小写则如何实现比较? 如果不太会做或想知道博主怎么做的可以联系博主并与博主交流。


本篇文章就到这了,下一篇文章将介绍Java中异常的用法。
觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder

脚本宝典总结

以上是脚本宝典为你收集整理的【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder全部内容,希望文章能够帮你解决【JavaSE系列】Java中的字符串之字符串常用方法与StringBuilder所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。