StringBuffer:线程安全的可变字符序列
* 一个类似于 String 的字符串缓冲区,但不能修改
StringBuffer是一个可变的字符序列
*
* StringBuilder:jdk5以后提供的单线程程序中去替代StringBuffer使用的,不同步,执行效率高
* 与StringBuffer有兼容的API(所有的功能都相同)
*
* StringBuffer的构造方法:
* public StringBuffer():空参构造,创建一个空参的字符串缓冲区对象,16个初始容量字符 (默认容量足够大)
* public StringBuffer(String str):构造一个字符串缓冲对象,并且为其声明一个字符序列 str
*
*
*
* public StringBuffer(int capacity):构造一个字符串缓冲区对象,指定初始容量
*
*
* 获取功能
:
* int length():获取缓冲区中的字符长度
* public int capacity():获取字符串缓冲区中的容量
StringBuilder用来替换StringBuffer
* String s1 = "world" ;
* "hello"+s1 ;---->使用反编译工具:new StringBuilder().append("hello").append(s1) ;
*
* StringBuffer的添加功能:
*
* StringBuffer append(任何数据类型):将指定的内容追加到字符串缓冲区中,返回字符串缓冲区本身
*
* public StringBuffer insert(int offset,String str)
* 可以将任意类型元素插入到指定位置处
*
*
* 删除功能:
* public StringBuffer deleteCharAt(int index):删除指定索引出的字符序列
* public StringBuffer delete(int start,int end):
* 删除从指定位置开始到指定位置结束的字符序列,但是不包含end,包含的end-1的位置
StringBuffer的反转功能
* public StringBuffer reverse()
public class StringBufferDemo3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
System.out.println("请输入 一个字符串:");
String line = sc.nextLine() ;
//反转--->StringBuffer
StringBuffer buffer = new StringBuffer(line) ;
buffer.reverse() ;
//在将StringBuffer--->String
String s = buffer.toString();
System.out.println(s);
}
}
在实际开发中,经常需要将A类型转换成B类型,因为我可能需要使用B类中的功能!
* 但是,有的时候就将B类型--->A类型,结果最终可能需要A类型!
*
* String<---->StringBuffer:如何转换
*
*
*
* StringBuffer的截取功能:
* 返回被截取的内容!
* public String substring(int start):从指定位置开始截取到末尾,返回一个新的字符串
* public String substring(int start,int end):从指定为值到end-1位置,返回值一个新的字符串
public class StringBufferDemo4 {
public static void main(String[] args) {
//String--->StringBuffer
String s = "hello" ;
//定义StringBuffer类型变量
// StringBuffer sb = s ; //类型不匹配
//方式1:StringBuffer的构造方法(String str)
StringBuffer sb = new StringBuffer(s) ;
System.out.println(sb);
System.out.println("-----------------------");
//方式2:使用StringBuffer的空参构造,+append(元素)
StringBuffer sb2 = new StringBuffer() ;
sb2.append(s) ;
System.out.println(sb2);
System.out.println("--------------------------------------");
//StringBuffer--->String
//String的构造方法:public String(StringBuffer buffer)
StringBuffer buffer = new StringBuffer("javaee") ;//类型为StringBuffer类型
String str = new String(buffer) ;
System.out.println(str);//String
System.out.println("----------------------");
//方式2:
//public String toString()
String str2 = buffer.toString();
System.out.println(str2);
System.out.println("----------------------");
StringBuffer sb3 = new StringBuffer() ;
sb3.append("hello") ;
sb3.append("android") ;
sb3.append("Javaee") ;
/* String substring = sb3.substring(5);*/
String substring = sb3.substring(5,10) ;
System.out.println(substring);
}
}
StringBuffer和String 作为方法的形式参数有什么区别?
* 方法的形式参数:基本类型
* 形参的改变不影响实际参数
*
* 引用类型
* 形参的改变直接影响实际参数
*
* String也是引用类型(特殊的引用类型),特点:是一个常量,一旦被创建,其值不能被更改 String s ="abc" ;
* String类型作为形式参数,效果和基本类型一致!
*
* 从概念上讲:
* StringBuffer:可变的字符序列 (线程安全的类)
* String::是一个常量,一旦被创建,其值不能被更改
键盘录入字符串,统计字符串中大写字母字符,数字字符,小写字母的出现个数(不考虑其他字符)
* 举例:
* 输入"helloworld123JavaEE"
*
* 输出: 大写字母字符: 3个
* 小写字母字符:13个
* 数字字符:3个
*
* 分析:
* 0)定义三个变量:
* 小写字母统计
* 大写字母统计
* 数字字符统计
* 1)键盘录入值
* 2)将字符串--遍历----toCharArry() --->字符数组
*
* 3)获取到每一个字符
* 当前字符 'a' 'z' ---> 小写字母字符
* 当前字符 'A' 'Z' --->大写字母字符
* 当前字符 '0' '9' --->数字字符
*
*
*
*
* 学习了Character类的判断
* 改造这个需求
* public static boolean isDigit(char ch):判断这个ch字符是否为数字
* * public static boolean isLowerCase(char ch):判断这个ch字符是否为小写字母字符
* * public static boolean isUpperCase(char ch):判断这个ch字符是否为答谢字母字符
public class Test {
public static void main(String[] args) {
//定义三个统计变量
int bigCount = 0 ;
int smallCount = 0 ;
int numberCount = 0 ;
Scanner sc = new Scanner(System.in) ;
//提示
System.out.println("请你输入一个字符串(包含大小写以及数字): ");
String line =sc.nextLine() ;
//转换
char[] charArray = line.toCharArray();
for (int i = 0; i <charArray.length ; i++) {
//获取到每一个字符
char ch = charArray[i] ;
//判断
if(ch>= 'a' && ch <='z'){
smallCount ++ ;
}else if(ch >= 'A' && ch <= 'Z'){
bigCount ++;
}else if(ch >= '0' && ch<='9'){
numberCount ++ ;
}else{
System.out.println("对不起,不提供这个字符统计");
}
}
System.out.println("大写字母字符有:"+bigCount+"个");
System.out.println("小写字母字符有:"+smallCount+"个");
System.out.println("数字字符:"+numberCount+"个");
}
}