一.String类的(遍历,拼接,字符串反转,判断字符串是否对称)
1.String类的遍历 :将字符串的每一个字符分别输出
使用String类的转换功能 :String---->字符数组toCharArray()--->char[]
public class StringTest {
public static void main(String[] args) {
//创建一个字符串
String str = "helloJavaEE" ;
//字符数组
char[] chs = str.toCharArray();
for(int x = 0 ; x < chs.length ; x ++){
char ch = chs[x] ;
System.out.println(ch);
}
}
}
2.已知一个数组,静态初始化,将数组拼接成String (使用功能改进)
定义一个将数组转换成String的功能,返回值就是String [元素1, 元素2, 元素2 ...]
拼接: +:拼接符号
concat():拼接功能
public class StringTest2 {
public static void main(String[] args) {
//创建数组,静态初始化
int[] arr = {11,22,33,44,55} ;
String str = arrayString(arr);
System.out.println(str);
//+ ---->使用Stringconcat功能完成
}
/**
* 定义一个将数组转换成String类型的功能
* 两个明确
* 1)明确返回值类型:String
* 2)明确参数类型以及参数个数
* 一个参数,int类型的数组
*/
public static String arrayString(int[] arr){
//定义一个空字符串
String result = "" ;
//拼接左中括号
result +="[" ;
//遍历arr数组,获取每一个元素
for(int x = 0 ; x < arr.length ; x ++){
//判断是否是最大角标
if(x == arr.length-1){
result += arr[x] ;
result +="]" ;
}else{
//拼接逗号和空格
result += arr[x] ;
result += ", ";
}
}
return result ;
}
}
3.键盘录入字符串,将字符串进行反转(使用功能改进) String转换功能
方式二:StringBuffer里面有转换功能
public class StringTest3 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请您输入一个字符串:");
String line = sc.nextLine() ;
//调用功能
String result = reverse(line) ;
System.out.println(result);
}
public static String reverse(String s) {
//定义一个结果变量
String result = "" ;
//将字符串转换成char[]
char[] chs = s.toCharArray(); //转换功能
for(int x = chs.length-1 ; x>=0 ; x --){
result += chs[x] ;
}
return result ;
}
}
4.(1)键盘录入一个字符串:判断字符串是否为对称字符串:
方式2: StringBuffer完成
分析:
(1)定义一个功能完成 compare(String str)---返回值 boolean
(2) 获取字符串长度 str.length()
(3) 创建一个字符数组:动态初始化 char[] charArray = new char[str.length()] ;
(4)遍历字符串--->通过获取功能: str.charAt(角标);获取到每一字符赋值字符数组的每一个元素
(5)遍历charArray数组,保证数组长度/2
charArray[i] != charArray[charArray.length-1-i]
就不对称
否则就对称
public class StringTest4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请您输入一个字符串:");
String line = sc.nextLine() ;
//调用功能
boolean flag = compare(line) ;
System.out.println(flag);
}
//比较的功能
private static boolean compare(String line) {
//创建一个新的字符数组,动态初始化
char[] charArray = new char[line.length()] ;
//遍历line字符串,通过charAt(int index)获取每一个字符
for(int x = 0 ; x < line.length() ; x ++){
charArray[x] = line.charAt(x) ;//将字符赋值字符数组中的每一个元素
}
//遍历字符数组charArray,保证长度/2
for(int i = 0 ; i < charArray.length/2 ; i ++){
if(charArray[i] !=charArray[charArray.length-1-i]) {
return false;
}
}
return true ;
}
}
(2)方式二:StringBuffer
public class StringTest4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请您输入一个字符串:");
String line = sc.nextLine() ;
boolean flag2 = compare2(line) ;
System.out.println(flag2);
}
private static boolean compare2(String line) {
/* //将line--->StringBuffer
StringBuffer sb = new StringBuffer(line) ;
String str = sb.reverse().toString();
return str.equals(line) ;*/
return new StringBuffer(line).reverse().toString().equals(line) ;
}
}
二.StringBuffer
1.添加功能:
append(任何类型) :将内容追加到字符串缓冲区中 (在字符串缓冲区的最后一个字符序列的末尾追加) 返回值是字符串缓冲区本身.
public StringBuffer insert(int offset,String str):插入:在指定位置处插入指定的内容
public class StringBufferDemo {
public static void main(String[] args) {
//创建一个字符串缓冲区对象
StringBuffer sb = new StringBuffer() ;
//StringBuffer append(任何类型)
sb.append("hello").append("world").append(100).append('a').append(12.34) ;
System.out.println("sb:"+sb);
System.out.println("----------------------------------");
//public StringBuffer insert(int offset,String str)
//插入
sb.insert(5,"高圆圆") ;
System.out.println("sb:"+sb);
}
}
2.删除功能
public StringBuffer deleteCharAt(int index):删除指定索引处的缓冲区的字符序列,返回字符串缓冲区本身
public StringBuffer delete(int start,int end):删除从指定位置到指定位置结束的字符序列(包含end-1处的字符),返回字符串缓冲区本身 --------->
[start,end-1]
public class StringBufferDemo2 {
public static void main(String[] args) {
//创建一个StringBuffer对象 (默认初始容量16)
StringBuffer buffer = new StringBuffer() ;
buffer.append("hello").append("world").append("Javaee") ;
System.out.println(buffer);
System.out.println("---------------------------");
System.out.println("delete():"+buffer.delete(5,10));//5-9
}
}
3.类型的相互转换(重点)
开发中:
(1)本身A类型,由于需要使用B类型的功能,所以 A类型---->B类型
(2)A类型,需要使用B类型的功能,A--->B类型,使用完功能之后,又可能结果又需要A类型,
B类型---->A类型
String---->StringBuffer
StringBuffer---->String
4.StringBuffer的特有功能-->public StringBuffer reverse(),反转之后,返回的是字符串缓冲区本身
键盘录入一个字符串,将字符串进行反转
public class StringBufferDemo4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in) ;
System.out.println("请您输入一个字符串:");
String line = sc.nextLine()
StringBuffer sb = new StringBuffer(line) ;
String result = sb.reverse().toString();
System.out.println(result);
}
}
使用功能改进
public class StringBufferDemo4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in) ;
System.out.println("请您输入一个字符串:");
String line = sc.nextLine() ;
//调用功能
String result2 = reverse(line);
System.out.println(result2);
}
/**
* reverse反转功能
* @param s 将指定的字符串反转
* @return 返回结果字符串
*/
public static String reverse(String s){
//方式1:s---->StringBuffer类型---->有参构造
StringBuffer buffer = new StringBuffer(s) ;
return buffer.reverse().toString() ;
//方式2:append()+空参构造方法
/*StringBuffer buffer = new StringBuffer() ;
String result = buffer.append(s).reverse().toString();
return result ;*/
//方式三:匿名对象
//return new StringBuffer().append(s).reverse().toString() ;
}
}
5.StringBuffer的截取功能
(1)public String substring(int start):从指定位置开始,默认截取到末尾,返回值是新的字符串
(2)public String substring(int start,int end):从指定位置开始到指定end-1结束进行截取,返回的新的字符串
public class StringBufferDemo5 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer() ;
sb.append("hello").append("world").append("javaee").append("anroid") ;
System.out.println("sb:"+sb);
System.out.println(sb.substring(5));//subString(xx)---->截取的新的字符串
System.out.println("sb:"+sb);
System.out.println(sb.substring(5,10));//end-1位置
StringBuffer的替换功能
public StringBuffer replace(int start, 起始索引
int end, 结束索引(end-1)
String str) 替换的内容
public class StringBufferDemo5 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer() ;
sb.append("hello").append("world").append("javaee").append("anroid") ;
System.out.println("sb:"+sb);
System.out.println(sb.replace(5,10,"高圆圆"));
}
}
面试题:
StringBuffer,StringBuilder和String的区别?
答:
(1)String:字符串是一个常量,一旦被赋值,其值不能更改/作为形式参数属于特殊的引用类型,形式参数的改变不会实际参数
(2) StringBuffer:可变的字符序列,线程安全的类----同步的----->执行效率低(线程角度)
(3)StringBuilder:可变的字符序列.和StringBuffer具有相互兼容的api,单线程程序中(只考虑执行效率,不考虑安全问题)
public class StringBufferTest {
public static void main(String[] args) {
String s = "hello" ;
System.out.println("s:"+s);
change(s) ;
System.out.println("s:"+s);
System.out.println("-------------------------");
StringBuffer sb = new StringBuffer("android") ;
System.out.println("sb:"+sb);
change(sb) ;
System.out.println("sb:"+sb);//androidjavaee
}
public static void change(StringBuffer sb){//StringBuffer作为形参
sb.append("javaee") ;//缓存区中追加了javaee
System.out.println("sb:"+sb);
}
public static void change(String s) {//String作为形参:和基本数据类型一致(String是一个常量)
s = s +"worldjavaee" ;
System.out.println("s:"+s);
}
}