------<a target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
黑马程序员----java基础String和stringbuffer总结
课堂总结:
/第十三天 总结
1. String
1.1 判断
|-- equals 判断字符串全等
|-- equalsIgnoreCase 判断字符串,忽略大小写
|-- contains 判断字符串是否包含
|-- startsWith 判断字符串开头
|-- endsWith 判断字符串结尾
|-- isEmpty 判断字符串是不是空
1.2 获取
|-- charAt 获取指定索引上的字符
|-- indexOf 获取字符第一次出现索引
|-- lastIndexOf 获取字符最后一次出现的索引
|-- substring 获取字符串一部分 包含头不包含尾
|-- length 获取字符串长度
1.3 转换
|-- getBytes 字符串转成字节数组,查询编码表
|-- toCharArray 字符串转成字符数组,不查询编码表
|-- toUpperCase 字符串全转大写
|-- toLowerCase 字符串全转小写
|-- concat 连接字符串
|-- static valueOf 任意类型转成字符串
1.4 其他方法
|-- split 切割字符串
|-- replace 替换字符串
|-- trim 去掉两端空格
|-- compareTo 字典顺序比较字符串,字符串的自然顺序
1.5 构造方法
|-- 字节数组转成字符串 new String(byte[] bytes)
|-- 字符数组转成字符串 new String(char[] ch)
2. 字符串特性
|-- 特殊,不需要new ""就是对象
|-- 不变特性
|-- 面试题
s =""
s = new String()
写程序证明不变性
变量和常量运算
3. 练习
|-- 字符串反转
|-- 获取出现次数
4. StringBuffer特点
|-- 缓冲区,提高字符串的效率
|-- 字符数组,通过复制实现可变长度
|-- 线程安全
|-- 容器
5. StringBuffer类方法
5.1 添加
|-- append 追加数据
|-- insert 指定位置插入数据
5.2 删除
|-- deletedCharAt 删除指定索引上的字符
|-- delete 删除两个索引之间的范围
5.3 修改
|-- setCharAt 修改的是指定索引上的单个字符
5.4 其他
|-- reverse 缓冲区反转
|-- replace 替换缓冲区,替换的是一个索引范围
5.5 转换
|-- String - StringBuffer
StringBuffer构造方法, append
|-- StringBuffer - String
StringBuffer方法toString
6. StringBuffer和StringBuilder区别
Buffer线程安全,速度慢
Builder线程不安全,速度快
作业题:
1. 字符串的两种定义方式的区别
String s="asdf";
创建了一个对象 "asdf"放在常量池里,
String s2=new String(asdf);
创建了两个对象一个在堆里 另一个在常量池
2. String类的特点是什么
String特点:不变性
String类是的本质是字符数组char[], 并且其值不可改变。
3. 编写程序证明String类的不变性
String s="abc";
String s2=s.toUpperCase();
System.out.println(s);
字符串s指向"abc",全为小写;字符串s2由a得来,指向"ABC";这时a的内容并没有变化,
4. 编程题
A. 自定义方法,实现两个字符串的比较,完全相等返回true
"azd" "rh"
一个个的比
数组 --> 长度
遍历,获取每个,对比,不同直接反false
String s1="asdfg";
String s2="asdfgrt";
int i=s1.compareTo(s2);
System.out.println(i);
B. 将字符串中的字符进行大小写互转
"aghEGweGHE"
利用ASCII 97-122 65-90 相差32
字符串变成数组
遍历 获取元素
判断ASCII范围
'a' <97
存储回数组
package day13;
/*
* B.将字符串中的字符进行大小写互转
*/
public class Test13 {
public static void main(String[] args) {
String s1=method();
System.out.println(s1);
}
public static String method(){
//创建字符串
String string="AddQhBjFROiu";
//创建一个StringBuffer的对象.
StringBuffer s=new StringBuffer();
//转换成字符型数组
char[] ch=string.toCharArray();
//遍历
for (int i = 0; i < ch.length; i++) {
//大写字母转换成小写字符
if(ch[i]>'A' && ch[i]<'Z'){
ch[i]+=32;
//把判断出的字符添加到StringBuffer里面
s.append(ch[i]);
}
//小写字母转换成大写字母
else if(ch[i]>'a' && ch[i]<'z'){
ch[i]-=32;
//把判断出的字符添加到StringBuffer里面
s.append(ch[i]);
//其他类型的不转换输出
}else
s.append(ch[i]);
}
return s.toString();
}
C. 判断一个字符串是否是对称。例如 abcba aba
要求字符串长度必须是奇数,不能少于3个字符
对长度判断是不是奇数,长度>=3
最远端两个字符判断,如果相同就是对称
public class Test13_1 {
public static void main(String[] args) {
String s1="asdfg";
boolean b=method(s1);
System.out.println(b);
}
public static boolean method(String s){
for (int i = 0; i < s.length()/2; i++) {
if((s.charAt(i)) != (s.charAt(s.length()-i-1)))
return false;
}
return true;
}
}
5. String类和StringBuffer的区别
StringBuffer是可变的
String是不可变得
6. 自定义方法,实现字符串缓冲区的反转
StringBuffer sb=new StringBuffer("asdfgh");
StringBuffer s2=sb.reverse();
System.out.println(s2);
课堂练习1:
package cn.itcast.string;
import java.util.Scanner;
//import java.util.Scanner;//CTRL+SHIFT+O
/*
* 做3个字符串的练习
*/
public class StringTest {
public static void main(String[] args) {
test_2();
}
/*
* woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”
* 中java出现了5次
* 实现步骤:
* 1. 定义int计数器,保存字符串出现次数
* 2. 字符串使用查找功能indexOf
* indexOf -1 程序结束,找完了
* 3. indexOf结果不是-1
* 计数器++
* 截取字符串 indexOf结果+被找的字符串长度
*/
public static void test_2(){
String big = "woaijavawozhenaijavawozhejavandeaijavawozhendehenaijavaxinbuxijavanwoaijavagun";
String small = "java";
//定义计数器
int count = 0 ;
//定义变量,记录indexOf计算结果
int index = 0 ;
//开始循环查找,结束条件是 indexOf = -1
while ( ( index = big.indexOf(small)) !=-1 ){
//计数器++
count++;
//对字符串进行截取,索引确定 index + 字符串的长度
big = big.substring(index+small.length());
}
System.out.println(count);
}
/*
* 举例:键盘录入”abc” 输出结果:”cba”
* 键盘录入 Scanner类方法nextLine
* 字符串转成字符数组
* 数组反转 -- 数组的最远端换位
* 字符数组变成字符串
*/
public static void test_1(){
//键盘输入
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
//字符串转成字符数组 toCharArray()
char[] ch = s.toCharArray();
//对数组进行反转,数组中元素确实进行了位置交换
for(int x = 0,y = ch.length-1 ; x < y ; x++,y--){
char temp = ch[x];
ch[x] = ch[y];
ch[y] = temp;
}
//将数组变成字符串
//String构造方法
String s1 = new String(ch);
System.out.println(s1);
}
/*
* 举例:int[] arr = {1,2,3}; 输出结果:[1, 2, 3]
* 获取数组每个元素,进行字符串的拼接
*/
public static void test(){
int[] arr = {1,2,3};
//定义字符串,保存一半中括号
String s = "[";
//数组遍历
for(int x = 0 ; x < arr.length ; x++){
//判断变量x是不是到达了数组的最大索引
if(x != arr.length-1)
//s = s + arr[x]+", ";
s = s.concat(arr[x]+", ");
else
//s = s + arr[x]+"]";
s = s.concat(arr[x]+"]");
}
System.out.println(s);
}
}
练习题2:
package cn.itcast.stringbuffer;
public class StringBufferTest {
public static void main(String[] args) {
String s = test();
System.out.println(s);
}
/*
* 将数组拼接成字符串
* 采用字符串缓冲区对象StringBuffer类实现
* 节约内存,运行速度就快了
* append取代字符串 + 操作
* 缓冲区变成字符串
*/
public static String test(){
int[] arr = {1,2,3};
//创建缓冲区对象
StringBuffer buffer = new StringBuffer();
buffer.append("[");
for(int x = 0 ; x < arr.length ;x++){
if( x!=arr.length-1)
buffer.append(arr[x]+", ");
else
buffer.append(arr[x]+"]");
}
return buffer.toString();
}
}