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字符与字符串
序号 | 方法名 | 类型 | 描述 |
---|---|---|---|
1 | public String(char value[]) | 构造方法 | 将字符数组中所有的内容变成字符串 |
2 | public String(char value[], int offset, int count) | 构造方法 | 将字符数组中的部分内容变成字符串 ,从索引offset开始,转换字符个数为count |
3 | public char charAt(int index) | 普通方法 | 取得指定索引位置的字符,索引从0开始 |
4 | public 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字节与字符串
序号 | 方法名 | 类型 | 描述 |
---|---|---|---|
5 | public String(byte bytes[]) | 构造方法 | 将字节数组中所有内容变成字符串 |
6 | public String(byte bytes[], int offset, int length) | 构造方法 | 将字节数组中部分内容变为字符串 |
7 | public byte[] getBytes() | 普通方法 | 将字符串转换成字节数组 |
8 | public byte[] getBytes(String charsetName) throws UnsupportedEncodingException | 普通方法 | 编码转换处理 |
这四个方法要注意最后一个方法,参数charsetName
只的是编码格式,常见的编码格式有utf-8
,gbk
等,除了这一点,还要注意使用该方法需要添加异常。
怎么添加呢?点击带红色波浪线的方法名,Alt + 回车
,会出现一个弹窗:
选择第一个回车就可以了。(注:这是编译器IDEA的操作方法,还可以直接在代码最前面导入:import java.io.UnsupportedEncodingException;并在main方法后添加throws UnsupportedEncodingException)
最后一个方法会根据提供的编码格式,编码成不同的字节数组,utf-8
和gbk
在编码英文字符是一样的,除英文字符外,编码就不相同了。
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字符串比较
序号 | 方法名 | 类型 | 描述 |
---|---|---|---|
9 | public boolean equals(Object anObject) | 普通方法 | 判断字符串内容是否相等 |
10 | public boolean equalsIgnoreCase(String anotherString) | 普通方法 | 忽略大小写,判断字符串是否相等 |
11 | public int compareTo(String anotherString) | 普通方法 | 比较两个字符串大小 |
12 | public 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字符串查找
序号 | 方法名 | 类型 | 描述 |
---|---|---|---|
13 | public boolean contains(CharSequence s) | 普通方法 | 判断一个字符串中是否包含子串 |
14 | public int indexOf(String str) public int indexOf(int ch) | 普通方法 | 从头开始查找指定字符串(字符)在字符串中的位置,查到了返回指定位置的开始索引,没有查找到返回-1 |
15 | public int indexOf(String str, int fromIndex) public int indexOf(int ch, int fromIndex) | 普通方法 | 从指定索引位置开始查找指定字符串(字符在字符串中的位置,查到了返回指定位置的开始索引,没有查找到返回-1 |
16 | public int lastIndexOf(String str) public int lastIndexOf(int ch) | 普通方法 | 从后向前查找指定字符串(字符)的位置 |
17 | public int lastIndexOf(String str, int fromIndex) public int indexOf(int ch, int fromIndex) | 普通方法 | 从指定位置由后向前查找指定字符串(字符)位置 |
18 | public boolean startsWith(String prefix) | 普通方法 | 判断字符串是否以指定字符串开头 |
19 | public boolean startsWith(String prefix, int toffset) | 普通方法 | 判断指定位置字符串是否以指定字符串开头 |
20 | public 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字符串替换
序号 | 方法名 | 类型 | 描述 |
---|---|---|---|
21 | public String replaceAll(String regex, String replacement) public String replace(CharSequence target, CharSequence replacement) | 普通方法 | 替换字符串中所有指定的内容 |
22 | public 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字符串拆分
序号 | 方法名 | 类型 | 描述 |
---|---|---|---|
23 | public String[] split(String regex) | 普通方法 | 以指定字符串为标记将字符串全部拆分 |
24 | public 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类数组相关操作字符串相关操作