Java学习之路(20)----String类

String类构造器

String s=“www”;

www是一个String匿名对
任何字符串常量其实是String匿名对象

equals:把常量写在前面,因为变量如果是空时,会出错,

如果是常量的话,就是匿名对象,他会在堆中开辟一个内存空间,所以不会有空指向。

构造器 说明
String() 初始化一个新创建的 String 对象,使其表示一个空字符序列。
String(String original) 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
String(byte[] bytes) 通过使用平台的默认字符(UTF-8)集解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的String。
String(byte[] bytes, int offset,int length, Charset charset) 通过使用指定的 charset 解码指定的 byte子数组,构造一个新的 String。(offset起始,length:子数组总长)
String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
String(StringBuffer buffer) 分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
String(StringBuilder builder) 分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。
		//String(byte[] bytes)平台默认的字符集解码指定的byte数组
		//GBK编码生成“你好啊”
		String st2="你好啊";
		byte[] bytes=st2.getBytes(Charset.forName("GBK"));
		//乱码
		String s2 = new String(bytes);
		
		System.out.println(new String(bytes,Charset.forName("GBK")));

		try{
			System.out.println(new String(bytes,"GBK"));
		}catch(UnsupportedEncodingException e){
			e.printStackTrace();
		}
		
		
		//乱码
		System.out.println(new String(bytes,Charset.forName("UTF-8")));
你好啊
你好啊
????

GBK:汉字2占个字节,中文符号2个字节,英语符号、字母、数字1个字节

UTF-8:汉字3占个字节,中文符号3个字节,英语符号、字母、数字1个字节

		
		//String(byte[] bytes)平台默认的字符集解码指定的byte数组
		//GBK编码生成“你好啊”
		String st2="你好,啊,郭7g洋洋";
		byte[] bytes=st2.getBytes(Charset.forName("GBK"));
		//乱码
		System.out.println("---平台默认解码----");
		String s2 = new String(bytes);//说明我的平台默认是GBK
		System.out.println(s2);
		System.out.println("---正确----");
		System.out.println(new String(bytes,Charset.forName("GBK")));

		try{
			System.out.println(new String(bytes,"GBK"));
		}catch(UnsupportedEncodingException e){
			e.printStackTrace();
		}
		
		System.out.println("---乱码----");
		//乱码
		System.out.println(new String(bytes,Charset.forName("UTF-8")));
		
		for(int i=0;i<bytes.length;i++){

			System.out.print(bytes[i]);
			System.out.print("   ");
		}
		System.out.println();
		
		//对部分字符串解码,2指从第2开始,4指总长,offset、length不对会乱码
		
		System.out.println(new String(bytes,11,1,Charset.forName("GBK")));
		
		String st3="你好,啊,郭7g洋洋";
		byte[] bytes1=st3.getBytes(Charset.forName("UTF-8"));
		//乱码
		System.out.println("---平台默认解码----");
		String stt3 = new String(bytes1);
		System.out.println(stt3);
		//正确
		System.out.println("---正确----");
		System.out.println(new String(bytes1,Charset.forName("UTF-8")));
		
		System.out.println("---乱码----");//说明我的平台默认是GBK
		System.out.println(new String(bytes1,Charset.forName("GBK")));
		
		for(int i=0;i<bytes1.length;i++){

			System.out.print(bytes1[i]);
			System.out.print("   ");
		}
		System.out.println();
		System.out.println(new String(bytes1,10,3,Charset.forName("UTF-8")));
,(英文)
,(中文)
---平台默认解码----
你好,啊,郭7g洋洋
---正确----
你好,啊,郭7g洋洋
你好,啊,郭7g洋洋
---乱码----
???,??????7g????
-60   -29   -70   -61   44   -80   -95   -93   -84   -71   -7   55   103   -47   -13   -47   -13
7
---平台默认解码----
浣犲ソ,鍟婏紝閮?7g娲嬫磱
---正确----
你好,啊,郭7g洋洋
---乱码----
浣犲ソ,鍟婏紝閮?7g娲嬫磱
-28   -67   -96   -27   -91   -67   44   -27   -107   -118   -17   -68   -116   -23   -125   -83   55   103   -26   -76   -117   -26   -76   -117
,

转换方法


public class StringTest2{
	
	public static void main(String[] args){
		
		String s1=new String("gyy");
		String s2="gyy";
		String s3="gyy";
		String s4="gYy";
		
		System.out.println(s1==s2);
		System.out.println(s2==s3);
		System.out.println(s2.equals(s4));
		System.out.println(s2.equalsIgnoreCase(s4));
		
		String ss=new String("huugyyjyy");
		//-1没有找到
		//,因为反向
		System.out.println(ss.lastIndexOf('g',2));
		
		//右数遇到的第一个,正向数第3
		System.out.println(ss.lastIndexOf('g',4));
		char[] c= new char[ss.length()];
		//小写
		System.out.println(ss.toLowerCase());
		//大写
		System.out.println(ss.toUpperCase());
		//拼接
		System.out.println(ss.concat("jjj"));
		c=ss.toCharArray();
		for(int i=0;i<c.length;i++){
		
		System.out.println(c[i]);
		}
		

		
		
	}
}
false
true
false
true
-1
3
huugyyjyy
HUUGYYJYY
huugyyjyyjjj
h
u
u
g
y
y
j
y
y

其他方法

		//替换
		System.out.println(ss.replace('j','l'));
		System.out.println(ss);
		String ss2= "    "+ss.concat("    ");
		System.out.println(ss2);
		System.out.println(ss2.trim());
		String ss3="huugyyjyy";
		System.out.println(ss.compareTo(ss3.toUpperCase()));
		System.out.println(ss.compareToIgnoreCase(ss3.toUpperCase()));
		String ss4="http//:www.th/fg/hu78i.com/";
		String[] ss5=ss4.split("/");
		for(String sp:ss5){
			System.out.println(sp);
		}
		String[] ss6=ss4.split("/",3);
		for(String sp:ss6){
			System.out.println(sp);
		}
huugyylyy
huugyyjyy
    huugyyjyy
huugyyjyy
32
0
http

:www.th
fg
hu78i.com
http

:www.th/fg/hu78i.com/

StringBuffer(安全)、StringBuilder(非安全)

  • StringBuffer:线程安全的; StringBuilder:线程非安全的
  • 字符串连接 String 的 + 比 StringBuffer(StringBuilder) 的 Append() 性能差了很多
  • 三者在执行速度方面的比较:StringBuilder(建议使用) > StringBuffer (线程要求同步时使用)> String
发布了53 篇原创文章 · 获赞 4 · 访问量 1317

猜你喜欢

转载自blog.csdn.net/weixin_43351473/article/details/104606731