String类
- String类基础
package com.day0209_1; import org.junit.Test; /** *String的使用 */ public class StringTest { /* String的实例化方式 方式一:通过字面量定义的方式 方式二:通过new+构造器的方式 面试题:String s =new String("abc");方式创建对象,在内存中创建了几个对象? 两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:"abc" */ @Test public void test2(){ //通过字面量定义的方式:此时的s1和s2的数据JavaEE声明在方法区中的字符串常量池中。 String s1="javaEE"; String s2="javaEE"; //通过new+构造器的方式:此时的s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值。 String s3=new String("javaEE"); String s4=new String("javaEE"); System.out.println(s1==s2);//true System.out.println(s1==s3);//false System.out.println(s1==s4);//false System.out.println(s3==s4);//false System.out.println("**********"); Person p1=new Person("Tom",12); Person p2=new Person("Tom",12); System.out.println(p1.name.equals(p2.name));//true System.out.println(p1.name==p2.name);//true p1.name="Jerry"; System.out.println(p2.name);//Tom } /* String:字符串,使用一对“”引起来表示 1.String声明为final的,不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 3.String内部定义了final char[] value用于符串数据 4.String:代表不可变的字符序列。简称:不可变性。 体现:1.当对字符串重新赋值时,需要重新指定内存区存储字域赋值,不能使用原有的Value进行赋值。 2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的Value进行赋值。 3.当调用String的replace()方法修改指定的字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的Value进行赋值。 5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。 6.字符串常量池中是不会存储相同内容的字符串的。 */ @Test public void test1(){ String s1="abc";//字面量 String s2="abc"; // s1="hello"; System.out.println(s1 == s2);//比较s1和s2的地址值 System.out.println(s1);//hello System.out.println(s2);//abc System.out.println("************"); String s3="abc"; s3+="def"; System.out.println(s3);//abcdef System.out.println(s2);//abc String s4="abc"; String s5 = s4.replace('a', 'm'); System.out.println(s4);//abc System.out.println(s5);//mbc } }
String类常用方法
package com.obj.test.string; public class Test1 { public static void main(String[] args) { String str1 = new String("abcdefg"); String str2 ="abcdefg"; String str3 ="abcdEFG"; String str4 = "def"; System.out.println(str1==str2); //false System.out.println(str1); System.out.println(str2); //设计到字符串比较的时候,都用equals方法 System.out.println(str1.equals(str2)); //true System.out.println(str1.length()); //7 // System.out.println(str2.charAt(0)); System.out.println(str2.charAt(6)); //str2.length-com.1 System.out.println(str1.charAt(str2.length()-1)); //取字符串最后一个字符 System.out.println(str2.equals(str3)); System.out.println(str2.equalsIgnoreCase(str3)); //忽略大小写 //从开头到结尾查找,返回找到的第一个子字符串位置。如未找到,返回-com.1 System.out.println(str2.indexOf("def")); //结果:3 //str2="abcdefg" System.out.println("abcdefg".indexOf("DF")); //结果:-com.1 //从末尾开始查找 System.out.println("abcdefgdefg".lastIndexOf("def")); //结果:7 //字符串的替换 String str5 = "abcdefg".replace('d','p'); System.out.println(str5); String str6 = "abcdbcd".replace("cd","HELLO"); System.out.println(str6); //abHELLObHELLO System.out.println("sxt,i love u".startsWith("sxt"));//true System.out.println("sxt,i love u".endsWith("sxt"));//false //截取字符串 String str7 = "abcdefghijklmnopqrstuvwxyz".substring(6); System.out.println(str7); //ghijklmnopqrstuvwxyz String str8 = "abcdefghijklmnopqrstuvwxyz".substring(6,11);//6--(11-com.1)包头不包尾 System.out.println(str8); //ghijk System.out.println("abcdE".toUpperCase());//变大写 System.out.println("abcdE".toLowerCase());//变小写 String str9 = " a b ";//长度7 //用户名:gaoqi String str10=str9.trim();//去除首尾空格 System.out.println(str10.length()); System.out.println(str10); //String是不可变字符序列。所有的替换、截取子字符串、去空格、转换大小写等都是生成新字符串 System.out.println(str9.replace(" ",""));//去空格 System.out.println(str9); } }
String类与其他类的转换
package com.day0216_1; import org.junit.jupiter.api.Test; import java.io.UnsupportedEncodingException; import java.util.Arrays; /** * 涉及到String类与其他类的转换 */ public class StringTest1 { /* String与byte[]之间的转换 编码:String-->byte[]:调用String的getBytes() 解码:byte[]-->String:调用String的构造器 */ @Test public void test3() throws UnsupportedEncodingException { String str1="abc123中国"; byte[] bytes = str1.getBytes();//使用默认的字符集,进行编码//UTF-8 System.out.println(Arrays.toString(bytes)); byte[] gbks=str1.getBytes("gbk");//使用gbk的字符集,进行编码 System.out.println(Arrays.toString(gbks)); System.out.println("*****************"); String str2 = new String(bytes);//使用默认的字符集,进行解码//UTF-8 System.out.println(str2); String str3 = new String(gbks); System.out.println(str3);//出现乱码,原因是编码集与解码集不一致! String str4 = new String(gbks, "gbk"); System.out.println(str4);//没有出现乱码,原因是编码集与解码集一致! } /* String与char[]之间的转换 String-->char[]:调用String的toCharArray() char[]-->String:调用String的构造器 */ @Test public void test2(){ String str1="abc123"; char[] charArray = str1.toCharArray(); for (int i = 0; i < charArray.length; i++) { System.out.println(charArray[i]); } char[] arr=new char[]{'h','e','l','l','o'}; String str2 = new String(arr); System.out.println(str2); } /* 复习: String 与基本数据类型、包装类之间的转换。 String -->基本数据类型、包装类:调用包装类的静态方法:parseXxx(str) 基本数据类型、包装类--> String:调用String重载的ValueOf(xxx) */ @Test public void test1(){ String str1="123";//字符串常量池中 int num=Integer.parseInt(str1); String str2=String.valueOf(num);//"123" String str3=num+"";//堆中 System.out.println(str1=str3);//false } }