直接创建的字符串和引用创建的字符串的区别,及字符串常量与引用值存放区别 1、字符串内容比较 2、字符串的常用转换相关方法 3、字符串截取方法 4、分裂字符串方法
注意事项直接创建的字符串和引用创建的字符串的区别,及字符串常量与引用值存放区别
1 package api.string.demo; 2 3 public class StringEquals { 4 public static void main(String[] args) { 5 /* 6 下面这两种写法,字符串的值是没有发生改变的! 7 有两个字符串:"Hello"和"java"保存在堆中的字符串常量池中 8 str是保存在栈中的字符串的地址值,改变的只是地址值! 9 */10 String str = "Hello";11 System.out.println(str);12 System.out.println(str.hashCode());//字符串"Hello"的地址值13 str = "java";14 System.out.println(str);15 System.out.println(str.hashCode());//字符串"java"的地址值16 17 String str1 = "Hello";18 String str2 = "Hello";19 char[] charArray = {'H', 'e', 'l', 'l', 'o'};20 String str3 = new String(charArray);21 22 //直接创建的字符串是在堆中的字符串常量池中!构造创建的字符串是在栈中的引用,是一个地址值!23 System.out.println(str1 == str2);//true24 System.out.println(str1 == str3);//false25 System.out.println(str2 == str3);//false26 27 }28 }常用方法
1、字符串内容比较
package api.string.demo;public class StringEquals {public static void main(String[] args) { String str1 = "Hello"; String str2 = "Hello";char[] charArray = {'H', 'e', 'l', 'l', 'o'}; String str3 = new String(charArray);// ==是进行对象地址值的比较,如果非要对字符串内容比较,则可以使用以下两个方法:/*【方法一】 public boolean equals(Object obj);(任何对象都可以用Object接收) 【注意】 equals方法具有对称性:a.equals(b)和b.equals(a)效果一样 如果比较一个常量和一个变量,推荐把常量字符串写在前面:“常量”.equals(变量名)*/System.out.println(str1.equals(str2));//trueSystem.out.println(str2.equals(str3));//trueSystem.out.println(str3.equals("Hello"));//trueSystem.out.println("Hello".equals(str1));//true//如果比较一个常量和一个变量,推荐把常量字符串写在前面:“常量”.equals(变量名)String str4 = null; System.out.println("abc".equals(str4));//falseSystem.out.println(str4.equals("abc"));//【报错】NullPointerException(空指针异常)/*【方法二】 public boolean equalsIgnoreCase(String str);(忽略大小写,进行内容比较) */String strA = "Java"; String stra = "java"; System.out.println(strA.equalsIgnoreCase(stra));//trueSystem.out.println(strA.equals(stra));//false } }
2、字符串的常用转换相关方法
1 package api.string.demo; 2 3 public class ConversionString { 4 //【字符串的常用转换相关方法】 5 /* 6 1.public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值 7 2.public byte[] getBytes():获取当前字符串底层的字节数组 8 3.public String replace(CharSequence oldString,CharSequence newString): 9 字符串的“内容替换”(将当前字符串中的oldString字符(串)替换为newString字符(串),返回这个新字符串)10 CharSequence:可以接收字符串类型。11 */12 public static void main(String[] args) {13 String str = "Hello";14 //转化为字符数组15 char[] chars = str.toCharArray();16 for (int i = 0; i < chars.length; i++) {17 System.out.println(chars[i]);18 }19 //转化为字节数组20 byte[] bytes = str.getBytes();21 System.out.println(bytes);22 for (int i = 0; i < bytes.length; i++) {23 System.out.println(bytes[i]);24 }25 //字符串的“内容替换”26 String replace = str.replace("l", "*"); //He**o27 //把str中的"l"替换成为"*"返回一个新的字符串28 System.out.println(replace);29 }30 }
3、字符串截取方法
1 package api.string.demo; 2 3 public class InterceptSubString { 4 //【字符串截取方法:】 5 /* 6 1.public String subString(int index):截取从参数索引位置一直到字符串末尾的内容,返回新的字符串。 7 2.public String subString(int begin,int end):截取从begin参数索引位置到end参数索引位置中间的内容,返回新的字符串。【备注】[begin,end) 8 */ 9 public static void main(String[] args) {10 String str = "HelloWorld!";11 String subStr = str.substring(5);// World12 System.out.println(subStr);13 String subStr2 = str.substring(4, 7);//oWo14 System.out.println(subStr2);15 }16 }
4、分裂字符串方法
1 package api.string.demo; 2 3 public class splitString { 4 //【分裂字符串方法】 5 /* 6 public String[] split(String regex)按照参数规则,将字符串分裂为若干部分,返回一个字符串数组 7 【regex】:正则表达式 8 */ 9 public static void main(String[] args) {10 String str = "aaa,bbb,ccc";11 String[] strArray = str.split(",");12 for (int i = 0; i < strArray.length; i++) {13 System.out.println(strArray[i]);14 }15 String str1 = "aaa.bbb.ccc";16 String[] strArray1 = str1.split(".");17 for (int i = 0; i < strArray1.length; i++) {18 System.out.println(strArray1[i]);19 }20 //【regex】:正则表达式(.)的正则表达式为(//.)21 System.out.println(strArray1.length);22 String[] strArray2 = str1.split("\\.");23 for (int i = 0; i < strArray2.length; i++) {24 System.out.println(strArray2[i]);25 }26 }27 }