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

Posted 未见花闻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE系列Java中的字符串之字符串常用方法与StringBuilder相关的知识,希望对你有一定的参考价值。

⭐️前面的话⭐️

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

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




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));
    

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等,除了这一点,还要注意使用该方法需要添加异常。

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

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

最后一个方法会根据提供的编码格式,编码成不同的字节数组,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
    

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"));
    


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
    

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
    

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型的参数。

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);
    


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

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("\\\\\\\\"))Java全栈JavaSE:19.常用类之大数运算日期和日历包装类

Java全栈JavaSE:18.常用类之System类Math类数组相关操作字符串相关操作

JavaSE入门学习27:Java常用类之String类(上)

Javase系列之面向对象

netty系列之:netty中常用的字符串编码解码器

JavaSE入门学习30:Java常用类之包装类