JAVA编程学习记录(API常用类(二))

		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 + "个");

	}

}





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值