本文共 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
10010020将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
130jdk5以后的特性:自动拆装箱
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!