文章目录
前言
String字符串类非常重要,同时他也要有很多方法。推荐把String字符串中常用的方法都用的很熟练。这样可以帮你节省很多处理字符串的时间。
对于字符串处理我非常推荐去学习一下正则表达式,他非常的强大,在处理字符串非常有用。
正则表达式学习请点击:【正则表达式】总结
一、大纲
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
public class BigDecimal extends Number implements Comparable<BigDecimal>
二、使用
1.构造器
1.1 创建
使用字面量和使用构造器创建字符串是一样的。
String s = "str";
String s2 = new String("str");
1.2 编码转换
将某个字符串的编码进行转换。(记得要抛出一个异常)
String s = "str";
// 将字符串s变成字节数组
byte[] bytes = s.getBytes();
// 将字节数组bytes的编码格式变成utf-8
String s2 = new String(bytes, "UTF-8");
System.out.println(s2); // str
2.常用方法
2.1 获取
获取长度
length()
返回此字符串的长度。
获取当前调用该方法的字符串长度。
String s = "hello";
int len = s.length();
System.out.println(len); // 5
获取字符
charAt(int index)
返回指定索引处的 char 值。
获取字符串s中下标为0的字符。
char c = s.charAt(0);
System.out.println(c); // h
获取(字符或字符串)索引(从头开始)
indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
获取字符和字符串出现出的索引(即下标)。如果没有找到会返回-1。
String s = "hello";
// 从字符串s中获取第一次出现'o'字符的位置
int i1 = s.indexOf('o');
// 从字符串s中获取第一次出现'llo'字符串的位置
int i2 = s.indexOf("llo");
System.out.println(i1); // 4
System.out.println(i2); // 2
// 从字符串下标1的位置开始,获取第一次出现'0'字符串的位置
int i3 = s.indexOf('o', 1);
// 从字符串下标1的位置开始,获取第一次出现'll0'字符串的位置
int i4 = s.indexOf("llo", 1);
System.out.println(i3); // 4
System.out.println(i4); // 2
获取(字符或字符串)索引(从末尾开始)
lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。
获取最后一次出现相同字符或字符串的索引。和上面的方法相似。
需要注意的是:指定的索引是从最后面开始的!
String s = "hello";
// 从字符串s中获取最后一次出现'o'字符的位置
int i1 = s.lastIndexOf('o');
// 从字符串s中获取最后一次出现'llo'字符串的位置
int i2 = s.lastIndexOf("llo");
System.out.println(i1); // 4
System.out.println(i2); // 2
// 从字符串末尾位置开始,从后往前,获取最后一次出现'0'字符串的位置
int i3 = s.lastIndexOf('o', s.length());
// 从字符串末尾位置开始,从后往前,获取最后一次出现'll0'字符串的位置
int i4 = s.lastIndexOf("llo", s.length());
System.out.println(i3); // 4
System.out.println(i4); // 2
2.2 判断
判断相等
equals(Object anObject) 、contentEquals(CharSequence cs)
将此字符串与指定的对象比较。
这两个都是比较两个字符串是否相等,如果相等则返回true
String s = "hello";
boolean b1 = s.equals("hello");
boolean b2 = s.contentEquals("hello");
System.out.println(b1); // true
System.out.println(b2); // true
判断相等(忽视大小写)
equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
忽视大小写比较是否相等。
String s = "hello";
boolean b1 = s.equalsIgnoreCase("HELLO");
System.out.println(b1); // true
判断相等(字典顺序)
compareTo(String anotherString)
按字典顺序比较两个字符串。
compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
“a” 和 “a” 相等,所以返回0。“a” 小于 “b” 所以返回-1。
// 考虑大小写
int i = "a".compareTo("a");
System.out.println(i); // 0
int i2 = "a".compareTo("b");
System.out.println(i2); // -1
// 同上一样,只不过不考虑大小写而已
int i = "A".compareToIgnoreCase("a");
System.out.println(i); // 0
int i2 = "A".compareToIgnoreCase("b");
System.out.println(i2); // -1
判断包含
contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
查找一个字符串中是否有某个字符或字符串(字符或者字符串都可以,因为参数为:CharSequence类型的)。
如下查找字符串 “hello” 中是否有字符 ‘h’。
String s = "hello";
boolean h = s.contains("h");
System.out.println(h); // true
判断包含(忽视大小写)
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
我们会发现,上面的contains()方法判断是否包含,无法判断有大小写不区分的情况。所以可以使用下面这个方法来进行判断是否包含。
ignoreCase:是否忽略大小写(忽略true)
toffset:字符串s的起始偏移量(判断开始位置)
other:字符串参数(需要判断是否包含的子字符串)
ooffset:子字符串的起始偏移量(判断开始位置)
len:需要判断的长度(子字符串需要判断是否匹配的长度)
String s = "hello";
String subStr = "he";
boolean b = s.regionMatches(true, 0, subStr, 0, subStr.length());
System.out.println(b); // true
判断前缀
startsWith(String prefix) 、startsWith(String prefix, int toffset)
测试此字符串是否以指定的前缀开始。
有两个方法,都是判断字符串是否以某个前缀(字符串)开始。、
只不过第二个方法可以指定开始判断前缀的位置。
String s = "hello";
boolean b = s.startsWith("he"); // 判断是否是指定前缀he开始
System.out.println(b); // true
boolean b2 = s.startsWith("he", 0); // 判断从下标0位置处开始,是否为指定前缀he开始
System.out.println(b2); // true
判断后缀
endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
判断字符串是否以指定的后缀结束的。
String s = "hello";
boolean b = s.endsWith("llo");
System.out.println(b); // true
判断正则匹配
matches(String regex)
告知此字符串是否匹配给定的正则表达式。
判断此字符串是否满足给定的正则表达式匹配。
String s = "hello";
boolean m = s.matches("\\w+");
System.out.println(m); // true
2.3 其他常用
拼接
concat(String str)
将指定字符串连接到此字符串的结尾。
相当于使用了 ‘+’ 符号。
String s = "hello";
// 相当于 String s = "hello" + "world.";
String concat = s.concat("world.");
替换(单个)
replace(char oldChar, char newChar) 、replace(CharSequence target, CharSequence replacement)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
这两个方法可以替换单个字符。也可以替换单个字符串。
String s = "hello";
String re = s.replace("h", "H");
System.out.println(re); // Hello
String re2 = s.replace("hello", "HELLO");
System.out.println(re2); // HELLO
正则替换(第一个)
replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
会将第一个满足该正则表达式的字符串进行替换。
“hello” 为正则表达式字符串,“HELLO” 为将要替换的字符串。
String s = "hello, hello!";
String rf = s.replaceFirst("hello", "HELLO");
System.out.println(rf); // HELLO, hello!
正则替换(多个)
replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
会将所有满足正则表达式的字符串进行替换。
"h"为正则表达式字符串, "H"为将要替换的字符串。
String s = "hello, hello!";
String ra = s.replaceAll("h", "H");
System.out.println(ra); // Hello, Hello!
拆分(全部)
split(String regex)
根据给定正则表达式的匹配拆分此字符串。
该方法会根据给定的正则表达式进行字符串拆分。
String s = "aa-bb-cc-dd-ee";
String[] split = s.split("-");
for (int i = 0; i < split.length; i++) {
System.out.print(split[i] + ",");
}
// 最终输出 aa,bb,cc,dd,ee,
拆分(指定个数)
split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
该方法会根据给定的正则表达式进行字符串拆分,同时还可以设置他指定拆分的个数。
如下,"-" 为正则表达式,2为按照正则表达式拆分成两个
String s = "aa-bb-cc-dd-ee";
String[] split = s.split("-", 2);
for (int i = 0; i < split.length; i++) {
System.out.print(split[i] + ",");
}
// 最终输出 aa,bb-cc-dd-ee,
获得子字符串
subSequence(int beginIndex, int endIndex) 、substring(int beginIndex) 、substring(int beginIndex, int endIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
subSequence() 方法返回的是一个子序列。其他两个返回的都是一个子字符串。
String s = "hello";
String sub01 = s.substring(1); // 子字符串从下标1开始获取到最后
System.out.println(sub01);
String sub02 = s.substring(1, 2); // 子字符串从下标1开始(包含)开始获取,到下标2结束(不包含)
System.out.println(sub02); // e
CharSequence sub03 = s.subSequence(1, 2); // 同上,不过类型不一样
System.out.println(sub03); // e
获得字符数组
toCharArray()
将此字符串转换为一个新的字符数组。
将一个字符串转成成一个新的字符串组。
String s = "hello";
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.print(chars[i] + ",");
}
// 最后输出h,e,l,l,o,
获得大小写
toLowerCase() 、toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
可以将一个字符串全部转换成小写或者大写。
String s = "hello";
String lc = s.toLowerCase(); // 转换成小写
System.out.println(lc); // hello
String uc = s.toUpperCase(); // 转换成大写
System.out.println(uc); // HELLO
去除首尾空白
trim()
返回字符串的副本,忽略前导空白和尾部空白。
可以去除一个字符串的前面和最后面的空白
String s = " hello ";
String trim = s.trim();
System.out.println(trim);
2.4 静态方法
类型转换
valueOf(int d)
返回 int 参数的字符串表示形式。
该方法有有多个重载方法。可以将不同基本数据类型转换成字符串形式。
转换成字符串形式后可以调用字符串的方法来操作。
int num = 123;
String numStr = String.valueOf(num); // 将int类型的数字转换成字符串
char c = numStr.charAt(0); // 获取第一个数字
System.out.println(c); // 1
格式化字符串
format(String format, Object… args)
使用指定的格式字符串和参数返回一个格式化字符串。
格式化某个字符串。
第1个字符串参数是一个字符串,用来格式化后面的字符串。第1个 %s 代表的是第2个字符串参数,第2个 %s 代表的是第3个字符串参数。
String s = String.format("格式化: %s, %s", "aa", "bb");
System.out.println(s); // 格式化: aa, bb
字符数组转换
copyValueOf(char[] data) 、copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
字符数组转换成字符串。可以设置起始偏移量(开始位置)和个数。
char[] chars = {'a', 'b', 'c', 'd', 'e'};
String s = String.copyValueOf(chars);
System.out.println(s); // abcde
String s2 = String.copyValueOf(chars, 0, 3);
System.out.println(s2); // abc