Java作业7

本文探讨了Java中String、StringBuffer和StringBuilder的API用法,例如String的replace()和toUpperCase(),StringBuffer的reverse()和delete(),StringBuilder的deleteCharAt()和insert()。还分析了它们的共同点和区别,如String不可变,StringBuffer线程安全,StringBuilder性能更高。在字符串不常变、多线程和单线程环境下,分别推荐使用String、StringBuffer和StringBuilder。另外,文章指出在for循环中不应使用“+”拼接字符串,因为会导致频繁创建新对象,影响效率。最后,解释了字符串的编码与解码概念,并给出了示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.借助jdk,选取几个String与StringBuffer、StringBuilder的常用API,并编写实例测试API的成功。
(1)String:
replace():替换

package xinshi;
public class hallo{
    public static void main(String[] args){
        String s1="123abc";
        String s2=s1.replace('a','4');
        System.out.println(s2);
    }
}//结果:1234bc

toUpperCase():转换成大写字母

package xinshi;
public class hallo {
	 public static void main(String[] args) {
	        String s="string";
	        System.out.println(s. toUpperCase());    
	 }
}
//结果:STRING

 (2)StringBuffer:

reverse():字符串倒序

package xinshi;
public class hallo {
	 public static void main(String[] args) {
	        StringBuffer s=new  StringBuffer("stringbuffer");
	        System.out.println(s. reverse());    
	 }
}//结果:reffubgnirts

delete():删除指定字符段

package xinshi;
public class hallo {
	 public static void main(String[] args) {
	        StringBuffer s=new  StringBuffer("stringbuffer");
	        System.out.println(s. delete(2,6));    
	 }
}//结果:stbuffer

(3)StringBuilder:

deleteCharAt():删除指定字符

package xinshi;
public class hallo {
	 public static void main(String[] args) {
	        StringBuilder s=new  StringBuilder("stringbuilder");
	        System.out.println(s.  deleteCharAt(2));    
	 }
}//结果:stingbuilder

 insert():插入字符串

package xinshi;
public class hallo {
	 public static void main(String[] args) {
	        StringBuilder s1=new  StringBuilder("string");
	        StringBuilder s2=new  StringBuilder("bulider");
	        System.out.println(s1.insert(6,s2));    
	 }
}//结果:stringbulider

 

请简述String、StringBuffer、StringBuilder三者之间的共同点与区别,应该分别在何种场景下使用?

相同点:

     (1).内部实现基于字符数组,封装了对字符串处理的各种操作

     (2).可自动检测数组越界等运行时异常

区别:

   (1).String内部实现基于常量字符数组,内容不可变;

        StringBuffer、StringBuilder基于普通字符数组,数组大小可根据字符串的实际长度自动扩容,内容可变。

   (2).性能方面:对于字符串的处理,相对来说  StringBuilder > StringBuffer >String

   (3).StringBuffer线程安全,StringBuilder非线程安全。

应用场景:

String在字符串不经常变化的场景中使用,如常量的声明,简单的变量运算。
StringBuffer在进行频繁的字符运算和多线程环境中使用。
StringBuilder在进行频繁的字符运算和单线程环境中使用。

3.为什么不建议在for循环中使用“+”进行字符串拼接?

如果使用“+”进行字符串拼接,不论是String还是优化后的StringBuffer,每次进行拼接时,都会产生新对象。所以在循环里,就会不断生成新对象,浪费资源,效率低下。

4.什么是字符串的解码与编码?请举例说明。

将unicode字符集转为本地字符集(如GB2312或GBK)的过程叫编码,反之叫解码。

编码 例:

package xinshi;
import java.io.*;
public class CharCode {
	public static void printByteArray(String msg,byte[] t) {
		System.out.println(msg+"**********");
		for(int i=0;i<t.length;i++) {
			System.out.println(Integer.toHexString(t[i]));
		}
	}
	public static void printCharArray(String msg,char[] c) {
	    System.out.println(msg+"**********");
	    for(int i=0;i<c.length;i++) {
	    	System.out.println(Integer.toHexString(c[i]));
	    }
	}
	public static void main(String[] args) {
		try {
			String str="中文";
			System.out.println(str);
			printCharArray("unicode:",str.toCharArray());
			byte[] b=str.getBytes("GB2312");
			printByteArray("GB2312",b);
			byte[] m=str.getBytes("ISO8859-1");
			printByteArray("ISO8859-1",m);
		}
		catch(UnsupportedEncodingException e) {
			System.out.println("没有相应字符集!");
		}
	}
}

结果:

中文
unicode:**********
4e2d
6587
GB2312**********
ffffffd6
ffffffd0
ffffffce
ffffffc4
ISO8859-1**********
3f
3f

解码 例:


package xinshi;

public class Decode {
	public static void printByteArray(String msg,byte[] t) {
		System.out.println(msg+"**********");
		for(int i=0;i<t.length;i++) {
			System.out.println(Integer.toHexString(t[i]));
		}
	}
	public static void printCharArray(String msg,char[] c) {
	    System.out.println(msg+"**********");
	    for(int i=0;i<c.length;i++) {
	    	System.out.println(Integer.toHexString(c[i]));
	    }
	}
	public static void main(String[] args) {
		byte[] b=new byte[6];
		int t=0,pos=0;
		String s;
		try {
			while(t!='\n') {
				t=System.in.read();
				b[pos]=(byte)t;
				pos++;
			}
			printByteArray("本地码:",b);
			s=new String(b,"GBK");
			System.out.println(s);
			printCharArray("unicode:",s.toCharArray());
		}
		catch(Exception e){
			System.out.println(e.getMessage());
		}
	}
}

 结果:

中文(窗口输入)
本地码:**********
ffffffd6
ffffffd0
ffffffce
ffffffc4
d
a
中文

unicode:**********
4e2d
6587
d
a
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值