Java字符串知识汇总

it2025-09-02  4

String类

从String对象中获取字符或字符数组

String str = "happy birthday"; //获取str中下标为4的字符 'y' System.out.println(str.CharAt(4)); //创建一个字符数组 char chardst[] = new char[15]; //从str中获取下标为8~14(左闭右开)的字符串,置于chardst字符数组中 str.getChars(8, 14, chardst, 0); System.out.println(chardst); // "rthday"

字符串的比较

str1.compareTo(str2)

//str1与str2比较,区分大小写。 // > 0 表示: str1 > str2 // == 0 表示: str1 == str2 // < 0 表示: str1 < str2 str1.compareTo(str2); //字符串str1与str2比较。忽略大小写,即不区分大小写。 str1.compareToIgnoreCase(str2);

str1.equals(str2)

//str1与str2是否相等,区分大小写。 // == 0 表示: str1 == str2 // != 0 表示: str1 != str2 str1.equals(str2); //字符串str1与str2是否相等。忽略大小写,即不区分大小写。 str1.equalsIgnoreCase(str2);

字符串与其他类型的转换

//字符串转换为其他数据类型 Integer.parseInt("2000"); Long.parseLong("2000"); Float.parseFloat("3.1415926"); Double.parseDouble("3.1415926"); //其他数据类型转换为字符串 String str = String.valueOf(i); //i指其他类型 i.toString();

字符串查找

//查找字符ch第一次出现的下标 / 最后一次出现的下标 str.indexOf(char ch) / str.lastIndexOf(char ch) //查找在指定索引之后的第一次ch出现的下标 / 指定索引之前的最后一次 str.indexOf(char ch, int beginIndex) / str.lastIndexOf(char ch, int beginIndex) String str = "helloheelhappy"; System.out.println(str.indexOf('h',6)); // 9 System.out.println(str.lastIndexOf('h',6)); // 5 //查找str中第一次出现字符串str的开始下标 / 最后一次的开始下标 str.indexOf(String str) / str.lastIndexOf(String str) String str = "heelhappyheelhappy"; System.out.println(str.indexOf("lha")); //3 System.out.println(str.lastIndexOf("lha")); //12 //查找在指定索引之后的第一次str出现的开始下标 / 指定索引之前的最后一次 str.indexOf(String str, int beginIndex) / str.lastIndexOf(String str, int beginIndex) String str = "heelhappyheelhappy"; System.out.println(str.indexOf("lha", 7)); //12 System.out.println(str.lastIndexOf("lha", 7)); //3

截取、拆分

substring 与 split

String str = "hello, today is Monday"; // 截取字符串str中0~8(左闭右开)的字符串片段 str.substring(0,8); // "hello, t" //以空格分隔 String strarr[] = str.split(" "); for (int i = 0; i < strarr.length; i++) System.out.println(strarr[i]);

替换、修改

concat, toLowerCase, toUpperCase, replace

String str = str1.concat(str2); //合并str1与str2字符串 str.toUpperCase(); //全部大写 str.toLowerCase(); //全部小写

replaceFirst()方法区分大小写。 使用"(?i)"可以不区分大小写,如str1。

String str = "Hello, hEllo"; String str1 = str.replaceFirst("(?i)HELLO", "Bye"); //Bye, hEllo String str2 = str.replaceFirst("(?-i)HELLO", "Bye"); //Hello, hEllo String str3 = str.replaceFirst("hEllo", "Bye"); //Hello, Bye

StringBuffer类

创建字符串

StringBuffer类是字符串缓冲区,每个字符串缓冲区都有一定的容量,即存储空间。只要字符串缓冲区的序列长度没有超出该容量,就不需要新分配内部缓冲数组。如果容量不足导致溢出,则此容量自动增大。StringBuffer创建的字符串的容量在长度基础上+16. StringBuffer str = new StringBuffer("happy"); //获取str的长度 5 System.out.println("str.length = " + str.length()); //获取str容量 21 System.out.println("str capacity = " + str.capacity()); 注意一下两段代码的区别,以更好理解StringBuffer类的length和capacity。

第一段代码中设置长度为10,超过strbuff的容量,所以为其申请新的容量; 而第二段代码中,第一次设置的长度为3,没有超过容量,所以不需要申请额外的容量。

StringBuffer strbuff = new StringBuffer(8); System.out.println(strbuff.length()); // 0 strbuff.append("abcdefg"); System.out.println(strbuff.length()); // 7 System.out.println(strbuff.capacity()); //8 strbuff.setLength(10); System.out.println(strbuff.length()); // 10 System.out.println(strbuff.capacity()); // 18 System.out.println(strbuff); //abcdefg strbuff.setLength(3); System.out.println(strbuff.length()); // 3 System.out.println(strbuff.capacity()); // 18 System.out.println(strbuff); //abc StringBuffer strbuff = new StringBuffer(8); System.out.println(strbuff.length()); // 0 strbuff.append("abcdefg"); System.out.println(strbuff.length()); // 7 System.out.println(strbuff.capacity()); //8 strbuff.setLength(3); System.out.println(strbuff.length()); // 3 System.out.println(strbuff.capacity()); // 8 System.out.println(strbuff); //abc strbuff.setLength(10); System.out.println(strbuff.length()); // 10 System.out.println(strbuff.capacity()); // 18 System.out.println(strbuff); //abc

替换、删除、获取子字符串

StringBuffer类对象可以在本对象中添加、删除、修改。这是其与String类的区别。

StringBuffer strbuff = new StringBuffer(); strbuff.append("happy birthday to you"); System.out.println(strbuff.length()); // 21 System.out.println(strbuff.capacity()); // 34 // 替换下标的字符 strbuff.setCharAt(15, '!'); //替换下标为15的字符 System.out.println(strbuff); // happy birthday !o you // 替换指定区间0~5(左闭右开)的字符串 strbuff.replace(0, 5, "That"); System.out.println(strbuff); // That birthday !o you //StringBuffer的getChars方法,获取一段子字符串 char chardst[] = new char[10]; strbuff.getChars(3, 12, chardst, 0); System.out.println(chardst); // t birthda System.out.println(strbuff.length()); // 20 // 删除15~21(左闭右开)的字符串 strbuff.delete(15, strbuff.length()); System.out.println(strbuff); // That birthday ! // 删除下标为2的字符 strbuff.deleteCharAt(2); System.out.println(strbuff); // Tht birthday !

添加 append()

StringBuffer类的append()与String类的concat()方法类似。其区别在于StringBuffer类不需要创建新的字符串对象,是在原有字符串的基础上修改的;而String类会创建新的字符串对象。

StringBuffer strbuff = new StringBuffer(); strbuff.append("...");

插入 insert()

StringBuffer strbuff = new StringBuffer(); strbuff.insert(index, str); //在下标为index的地方插入str,后面的元素向后移
最新回复(0)