JAVA作业7(20201027)

1.借助JDK, 选取几个String与StringBuffer 、StringBuilder的常用API,并编写实例测试API的功能。
String
在这里插入图片描述

在这里插入图片描述

StringBuffer
在这里插入图片描述
在这里插入图片描述
StringBuilder(与Buffer类似):
在这里插入图片描述
在这里插入图片描述

2.请简述String,StringBuffer,StringBuilder三者之间的共同点与区别,应该分别在何种场景下使用?
共同点:内部实现基于字符数组,封装了对字符串处理的各种操作;可自动检测数组越界等运行时异常
区别:
String:具有不可变性,作为参数传递时传引用);常作为参数传递;
StringBuffer:值是可变的,具有对象引用传递特点;对字符串的增加、插入、修改、删除等操作比String高效(不需多次创建新的对象);
StringBuilder:内容可变,与StringBuffer的API兼容,性能比StringBuffer更高,但不是线程安全的;
性能方面,对于字符串的处理,相对来说
StringBuilder >StringBuffer>String

3.为什么不建议在for循环中使用“+”进行字符串拼接?
因为在String中使用+,并不是对对象进行修改,而是创建新对象。如果在for循环中用+进行拼接,则会浪费空间和时间,导致性能低下,影响执行效率。
e.g.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.什么是字符串的编码与解码?请举例说明。
编码:将Unicode字符集转换为本地字符集(GB2312或GBK)的过程,相当于将英文翻译成中文。
e.g.

import java.io.*;

public class bianma {
	public static void main(String[]args)throws IOException {
		String str="中文";
		System.out.println(str);
		//输出"中文"
		
		char[]c=str.toCharArray();
		System.out.println(c);
		//输出"中文"
		
		//unicode字符集中“中文”二字对应的代码
		for(int i=0;i<c.length;i++)
			System.out.println(Integer.toHexString(c[i]));
		//输出:4e2d
	    //    6587
		
		//编码 国标
		byte[] b=str.getBytes("GB2312"); 
		for(int i=0;i<b.length;i++)
			System.out.println(Integer.toHexString(b[i]));
		//输出:ffffffd6
		//    ffffffd0
		//    ffffffce
		//    ffffffc4
		
		//编码 英文字符集
		byte[] d=str.getBytes("ISO8859-1"); 
		for(int i=0;i<d.length;i++)
			System.out.println(Integer.toHexString(d[i]));
		//输出:3f
		//    3f
		//(没有对应的汉字代码,转化错误)
		
		
	}
}

解码:将本地字符集转换为Unicode字符集的过程,相当于将中文翻译成英文。
e.g.
注:这里对课本中的在这里插入图片描述
产生疑问,因为
“中”:2 bytes;
“文”:2 bytes;
(按一下回车会有两个符)
回车符’\r’:2 bytes;
换行符’\n’:2 bytes;
所以我认为应该改成
在这里插入图片描述
实验结果:
‘6’:
在这里插入图片描述

‘8’:在这里插入图片描述
以下是实验内容

import java.io.*;

public class jiema {
	public static void main(String[]args)throws IOException {
		byte[]b=new byte[8];
		//"中":2 bytes;
		//"文":2 bytes;
		//(按一下回车会有两个符)
		//回车符'\r':2 bytes;
		//换行符'\n':2 bytes;
		
		int t=0,pos=0;
		String s;
		while(t!='\n'){//换行
			t=System.in.read();//输入内容按字节读入存放
		    b[pos]=(byte)t;
		    pos++;
		 }
		//System.out.println();
		//本地码
		for(int i=0;i<b.length;i++)
			System.out.println(Integer.toHexString(b[i]));
		//输出:ffffffe4
		//    ffffffb8
	    //    ffffffad
	    //    ffffffe6
	    //    ffffff96
		//    ffffff87
		//    d       //回车
		//    a       //换行
		
		//解码 Unicode
		s=new String(b,"UTF8");//按照UTF8方式进行解码
		char []d=s.toCharArray();
		for(int i=0;i<d.length;i++)
			System.out.println(Integer.toHexString(d[i]));
		//输出:6d93
		//    e15f
		//    6783   //UTF8类型
		//    d
		//    a
		
		s=new String(b,"GBK");//按照GBK方式进行解码
		char []e=s.toCharArray();
		for(int i=0;i<e.length;i++)
			System.out.println(Integer.toHexString(e[i]));
		//输出:4e2d 
		//    6587   //GBK类型
		//    d
		//    a
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值