JAVA编程学习记录(API常用类(二))
发布日期:2021-07-23 18:13:30 浏览次数:3 分类:技术文章

本文共 8749 字,大约阅读时间需要 29 分钟。

System.out.println(Character.toUpperCase('a'));
第五周 API常用类(二)

一 StringBuffer类

线程安全的可变字符序列

概念:表示的是一个本身内容可变的字符串对象,包含一个缓冲区,主要用于完成字符串的动态添加、插入和替换等操作。

StringBuffer的添加功能:

public StringBuffer append(String/boolean....) :在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();				sb.append("hello");		sb.append('A');		sb.append(true);		sb.append(1234);		sb.append(3.14);				System.out.println(sb);
public StringBuffer insert(int offset,String str):将当前str字符串添加到指定位置处,它返回字符串缓冲区本身
//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("a1");		sb.append("b2");		sb.append("d4");		sb.append("e5");		sb.append("f6");				sb.insert(4, "c3");				System.out.println(sb);//a1b2c3d4e5f6
StringBuffer的删除功能:

public StringBuffer deleteCharAt(int index):移除指定位置处的字符

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("a1");		sb.append("b2");		sb.append("d4");		sb.append("e5");		sb.append("f6");		//删除‘b’这个字符		sb.deleteCharAt(2);				System.out.println(sb);//a1b2d4e5f6-->a12d4e5f6

public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("a1");		sb.append("b2");		sb.append("d4");		sb.append("e5");		sb.append("f6");		//移除d4e5		sb.delete(4, 8);				System.out.println(sb);//a1b2d4e5f6-->a1b2f6
StringBuffer的反转功能:

public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("abcd1234");		sb.reverse();				System.out.println(sb);//4321dcba
StringBuffer的截取功能:

public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("HelloWorld");		//截取world		//返回的是一个新字符,所以将截取后的值赋给新定义的str		String str = sb.substring(5);				System.out.println(str);

public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("HelloWorld");		//截取oWo		//因为包前不包后,所以截止到‘r’		String str = sb.substring(4,7);				System.out.println(str);
StringBuffer的替换功能:

public StringBuffer replace(int start,int end,String str) :从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身

//创建一个字符串缓冲区对象		StringBuffer sb = new StringBuffer();						sb.append("HelloWorld");		sb.replace(5, 10, "China");				System.out.println(sb);
StringBuffer练习

1.将数组拼接成字符串类型

package org.test_01;public class StringBufferDemo {		public static void main(String[] args) {		//定义数组		int [] arr = {1,2,3};		//方法一:String类型		String str = arrayToString(arr);		System.out.println(str);				//方式二:StringBuffer类型		String str2 = arrayToString2(arr);		System.out.println(str2);	}	//方式二:StringBuffer类型	private static String arrayToString2(int[] arr) {		//创建字符串缓冲区对象		StringBuffer sb = new StringBuffer();		//添加左中括号		sb.append("[");		//遍历数组		for (int i = 0; i < arr.length; i++) {			//判断			if(i==arr.length-1) {				sb.append(arr[i]);			}else {				sb.append(arr[i]).append(",");			}		}		//添加右中括号		sb.append("]");		return sb.toString();	}		//方式1:String类型	private static String arrayToString(int[] arr) {		//定义一个字符串		String result = "";		//拼接左中括号		result += "[";		//遍历数组		for(int x = 0 ; x < arr.length; x++) {			//判断			if(x==arr.length-1) {//当遍历到最后一个数组时拼接右中括号				result += arr[x];				result += "]";			}else {				result += arr[x];				result += ",";			}		}		return result;	}}

2.判断一个字符串是否是对称字符串(方法改进)

package org.test_01;/** * 用键盘录入一个字符串,判断是否对称 */import java.util.Scanner;public class StringBufferTest {	public static void main(String[] args) {		//创建键盘录入对象		Scanner sc = new Scanner(System.in);		//接收数据		System.out.println("请输入一个字符串");		String line = sc.nextLine();		//方法改进		boolean flag = isSame(line);		if(flag) {		System.out.println("对称");		}else {			System.out.println("不对称");		}	}	public static boolean isSame(String s) {		//创建字符串缓冲区对象//		StringBuffer sb = new StringBuffer(s);//		String str = sb.reverse().toString();//		return str.equals(s);				//一步完成		return new StringBuffer(s).reverse().toString().equals(s);	}}
几个面试题

1.StringBuffer,String,StringBuilder的区别?

StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区(两者都看做容器);

StringBuffer:线程安全的,同步的,执行效率低

StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder

StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区

2.StringBuffer和数组的区别?

数组: 它是可以存储多个数据的容器,并且多个数据的类型必须一致. //数组长度功能: length属性

StringBuffer: 它是容器,它在字符串缓冲区始终存储的只能是字符串类型的数据. //获取缓冲区的长度: length( ); 

二 数据类型包装器类

Java使用简单的数据类型, 例如整型(int)和字符(char), 这些数据类型不是对象层次结构的组成部分. 它们通过值传递而不能直接通过引用传递给方法. 有时需要对这些简单的类型建立对象表达式,例如, 当把数据放到集合中时, 需要首先将其包装成对象. 为了能够用对象的形式代表简单数据类型, Java提供了与每一种简单类型相对应的类. 本质上, 这些类包装(wrap)了简单类型的数据. 因此,通常将它们称为类型包装器或者包装器类.

基本数据类型都有一个对应的包装类型, 目的就是为了将基本数据类型可以同String类型之间互相转换.

/** *	 * 	byte				Byte *	short				Short *	int				Integer	 *	long				Long *	float				Float *	double				Double *	char				character *	boolean				Boolean *  */

1. Integer类

Integer类是int类型的包装类类型

获取Integer的最值

public static final int MAX_VALUE    //最大值

System.out.println(Integer.MAX_VALUE);    //2147483647

public static final int MIN_VALUE    //最小值

System.out.println(Integer.MIN_VALUE);    //-2147483648
Integer提供了静态功能:

public static String toBinaryString(int i)    //以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。

System.out.println(Integer.toBinaryString(10086));    //10011101100110

public static String toOctalString(int i)    //以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。

System.out.println(Integer.toOctalString(10086));    //23546

public static String toHexString(int i)    //以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。

System.out.println(Integer.toHexString(10086));    //2766
Integer的构造方法:

    public Integer(int value)

    public Integer(String s)

运行时的常见异常

 java.lang.NumberFormatException    //当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

//	Integer iii = new Integer ("abc");	//打印不出来,因为该字符串不能转换为数值类型	Integer iiii = new Integer("100");	//可以打印出来,因为用parseInt方法把字符串类型转换为数值类型		//	System.out.println(iii);	//抛出异常java.lang.NumberFormatException	System.out.println(iiii);
int-->String&String-->int

将int类型转换为String类型

    valueOf ( int i )

//int-->String		int num = 100;				//方式1:字符串拼接		String str = "" + num;		System.out.println(str);				//方式2:valueOf(int i)		//int-->Integer-->String		Integer i = Integer.valueOf(num);		String str2 = i.toString();		System.out.println(str2);				//方式3:静态toString(int i)	static String toString(int i) 		String str3 = Integer.toString(num);		System.out.println(str3);//验证是不是字符串类型,如果是,则会自动拼接为10020

结果:

100

100
10020

将String类型转换为int类型

    static int parseInt ( String s )

//String-->int		String s ="100";				//方式1:String-->Integer-->int		Integer ii = new Integer(s);		int num1 = ii.intValue();		System.out.println(num1+20);//验证是不是数值类型,如果是,则会自动加和为120				//方式2:(常用)public static int parseInt(String s)		int num2 = Integer.parseInt(s);		System.out.println(num2+30);//验证是不是数值类型,如果是,则会自动加和为130

结果:

120

130

jdk5以后的特性:自动拆装箱

String-->StringBuffer、int-->Integer(是int类型的包装类类型)、char-->Character(char类型的包装类类型)等等

int i = 5;

Integer ii = i ;//这是自动装箱

int j = ii;//这是自动拆箱

//创建Integer对象//		Integer i = new Integer(100) ;		Integer i = 100 ;				i += 200;		//先拆箱(Integer-->int),后装箱(int值---->Integer)		//引用类型 += 基本类型     		System.out.println("i:"+i);				/**		 * 反编译代码:		 * 		 * 	Integer i = Integer.valueOf(100);			i = Integer.valueOf(i.intValue()  + 200);//(int类型的100 +200)			System.out.println((new StringBuilder("i:")).append(i).toString());		 */

为什么会有自动拆装箱?

比如int和Integer,int是基本类型,Integer是是int的包装类,在jdk5之前int不能直接赋值给Integer的,正确将int类型赋值给Integer的方式是:Integer integer = new Integer(5);而jdk5以后系统会自动完成转换

三 Character类

Character是char类型的包装类类型

Character类的判断功能:

public static boolean isDigit(char ch): 确定指定字符是否为数字

System.out.println(Character.isDigit('a'));				System.out.println(Character.isDigit('0'));

public static boolean isLowerCase(int ch): 确定是否是小写字母字符

System.out.println(Character.isUpperCase('a'));

public static boolean isUpperCase(int ch): 确定是否大写字母字符

System.out.println(Character.isLowerCase('b'));
两个转换功能

public static int toLowerCase(int codePoint)

System.out.println(Character.toUpperCase('a'));

public static int toUpperCase(int codePoint)

System.out.println(Character.toLowerCase('A'));
练习:

需求:键盘录入一个字符串,统计当前字符串中大写字母字符,小写字母字符,数字字符的个数(不考虑其他字符) 

public class CharacterDemo {	public static void main(String[] args) {		// 定义三个统计变量		int bigCount = 0;		int smallCount = 0;		int numCount = 0;		// 创建键盘录入对象		Scanner sc = new Scanner(System.in);		// 接收数据		System.out.println("请输入一个字符串:");		String line = sc.nextLine();		// 字符串转字符数组		char[] chs = line.toCharArray();		// 遍历		for (int i = 0; i < chs.length; i++) {			char ch = chs[i];			// 判断统计			if (Character.isUpperCase(ch)) {				bigCount++;			} else if (Character.isLowerCase(ch)) {				smallCount++;			} else if (Character.isDigit(ch)) {				numCount++;			}		}		// 输出结果		System.out.println("大写字母字符有:" + bigCount + "个");		System.out.println("小写字母字符有:" + smallCount + "个");		System.out.println("数字字符有:" + numCount + "个");	}}

转载地址:https://blog.csdn.net/otmqixi/article/details/80140115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JAVA编程学习记录(API标准类库:工具类)
下一篇:JAVA编程学习记录(API常用类(一))

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月28日 21时03分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章