- String类
- Scanner用法
- String类的构造方法
- String类的判断功能
- String类的获取功能
- String类的转换功能
- ✨String类应用(字符串反转)
- StringBuffer类
- StringBuffer的构造方法
- append和insert方法
- StringBuffer的替换功能
- Java中String和StringBuffer的参数传递
- 磊总结
- 字符串在Java 编程中必不可少,在 Java 中字符串属于对象,并且Java 提供了 String 类来创建和操作字符串。让我们来简单介绍下String类并对其进行研究。
- 在使用String类之前我们先简单了解下Scanner的用法。Scanner是键盘录入一种最基础的方法。
- hasNextXXX( ): 判断是否还有下一个输入项,其中XXX可以是Int , Double等。如果我们需要判断下一个输入是不是字符串的时候,则可以省略XXX。
- nextXXX( ): 获取下一个输入项,XXX的含义跟上面一个一样。Scanner使用空格,回车作为分隔符。
import java.util.*;
public class demo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
if(sc.hasNextInt()){
int i=sc.nextInt();
System.out.println(i);
}else{
System.out.println("输入的类型错误");
}
}
//只接收int类型,如果是a就会输出第二条
}
- 一般情况下,我们从键盘读入数据都是先直接当作字符串来读取,随后在进行相对的数据类型转化即可 (如果不这么做,那么我们先录入int再录入字符串,可能会因为缓冲区的问题而发出现BUG)。
import java.util.*;
public class demo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
int i=sc.nextInt();
System.out.println("请输入第二个字符串");
String line2=sc.nextLine();
System.out.println("i= " +i+ " ,line2= "+ line2);
}
//输入第一个27后,会直接输出i= 27 ,line2= 并没有进行第二次的字符串输入
}
- sc.nextLine( ): 用来读取字符串
public String() 空构造 public String(byte[] bytes) 把字节数组转化为字符串 public String(byte[] bytes,int index,int length) 把字节数组的一部分转化为字符串 public String(char[] value) 把字符数组转化为字符串 public String(char[] value,int index,int count) 把字符数组的一部分转化为字符串 public String(String Original)把字符串常量转化为字符串
byte[] arr2={97,98,99,100,101,102};
String s3=new String(arr,2,3);
System.out.println("s3");//输出c d e
String类的判断功能
import java.util.*;
public class demo1 {
public static void main(String[] args) {
String s1="wanmei";
String s2="wanmei";
String s3="Wanmei";
//在String类中被重写的equals方法
System.out.println(s1.equals(s2)); //true
System.out.println(s2.equals(s3)); //false
//equalsIgnoreCase方法,忽视字符串中的大小写进行比较
System.out.println(s1.equalsIgnoreCase(s2));//true
System.out.println(s2.equalsIgnoreCase(s3));//true
//contains方法 判断大字符串是否包含小字符串
String c1="我喜欢biancheng";
String c2="biancheng";
String c3="bubiancheng";
System.out.println(c1.contains(c2));//true包含
System.out.println(c2.contains(c3));//false不包含
System.out.println(c1.contains(c3));//false不包含
//startsWith方法 判断是否以传入的字符为开头
String c4="我喜欢";
String c5="cheng";
System.out.println(c1.startsWith(c4));//true以我喜欢开头
System.out.println(c1.startsWith(c5));//false
//endsWith方法 判断是否以传入的字符为结尾
System.out.println(c1.endsWith(c4));//false
System.out.println(c1.endsWith(c5));//true以cheng结尾
//isEmpty方法 判断字符串是不是空
String n1="niubi";
String n2="";
System.out.println(n1.isEmpty());//false
System.out.println(n2.isEmpty());//true
}
}
String类的获取功能
import java.util.*;
public class demo1 {
public static void main(String[] args) {
String s1="heima";
System.out.println(s1.length()); //5
//indexof返回值都是int类型
//indexof(int ch)方法 返回指定字符在此字符串第一次出现的索引
int index=s1.indexOf("i");
System.out.println(index); // 2 第二个位置
//indexof(String str)方法 返回指定字符串在该字符串第一次出现的位置
int index2=s1.indexOf("hei");
System.out.println(index2); //0 第零个位置
//如果不存在返回就是-1
//indexof(int ch , int fromIndex)返回指定字符串在此字符串中从指定位置后第一次出现的索引
String s2="woaiheima";
int indexf=s2.indexOf('a',3);
int indexf2=s2.indexOf('a',2);
System.out.println(indexf2); // 2 第二个位置
System.out.println(indexf); //8 第八个位置
//lastindexof 方法 从后向前找第一次出现的位置(返回的是索引)
int indexf3=s2.lastIndexOf('a');
System.out.println(indexf3); //8 第八个位置
//substring (int start) 方法 从指定位置开始,一直到末尾
String s3="wozhendewudi";
String s4=s3.substring(4);
System.out.println(s4); //从第四个位置e开始一直接去到末尾
//substring(int start , int end)方法
String s5=s3.substring(3,6);
System.out.println(s5);//hen 要头不要尾
}
}
String类的转换功能
import java.util.*;
public class demo1 {
public static void main(String[] args) {
//getBytes()把字符串转化为字节数组
String s1="abc";
byte[] arr=s1.getBytes();
for(int i=0;i
System.out.println(arr[i] + " ");//97 98 99
}
String s2="你好你好";
//会输出负值 gbk码表一个中文代表两个字节
//gbk码表特点,中文的第一个字节肯定是负数
//toCharArray方法,将字符串转化为字符数组
String s="heima";
char arr1[]=s.toCharArray();
for(int i=0;i
System.out.println(arr1[i]); //h e i m a
}
// toLowerCase 把字符串转成小写
String Ssmall = s.toLowerCase();
System.out.println(Ssmall); //heima
//toUpperCase 把字符串转成大写
String Sbig=s.toUpperCase();
System.out.println(Sbig); //HEIMA
//concat(String str) 把字符串拼接
String slong = Ssmall.concat(Sbig);
System.out.println(slong); //heimaHEIMA
String ssf=Sbig+Ssmall+"niubi";
System.out.println(ssf);
}
}
✨String类应用(字符串反转)
- 通过键盘录入获取字符串Scanner
- 将字符串转化成字符数组
- 倒着遍历,再拼接起来
import java.util.*;
public class demo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String line=sc.nextLine();
char[] arr=line.toCharArray();
String s="";
for(int i=arr.length-1;i>=0;i--){
s=s+arr[i];
}
}
}
StringBuffer类
- StringBuffer相对于String类是线程安全可变的字符序列。如果我们用String类创建一个对象,在对它进行赋值,那么会删除原来的对象,创建新的对象。而StringBuffer则不会产生新的对象。所以在做插入删除的时候,使用StringBuffer可以节省空间。
public StringBuffer() 空参构造 public StringBuffer(int capacity) 指定容量的字符串缓冲区对象 public StringBuffer(String str) 指定字符串内容的字符串的缓冲对象
public class demo1 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
System.out.println(sb.length()); //输出0 字符串中字符的数量
System.out.println(sb.capacity()); //输出16,容器的初始容量
StringBuffer sb2=new StringBuffer("lihai");
System.out.println(sb2.length()); //输出5 字符串中字符的数量
System.out.println(sb2.capacity()); //输出21 字符串的length + 初始容量
}
}
append和insert方法
- append和insert是在StringBuffer类中的用来添加的方法。
public StringBuffer append(String str) 可以把任意类型数据添加到字符串缓冲区里面,并且返回字符串缓冲区本身
public StringBuffer insert(int offset , String str) 在指定位置把任意类型数据添加到字符串缓冲区里面,并且返回字符串缓冲区本身
- StringBuffer是字符串缓冲区,当new的时候是在堆内存创建一个对象,底层是一个长度尾16的字符数组。当调用添加方法时,不会再重新创建对象,而是不断向原缓冲区添加字符
import java.util.*;
public class demo1 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("niubi");
//deleteCharAt删除索引对应位置的字符
sb.deleteCharAt(4);
System.out.println(sb);//输出niub 删除索引为4的字符
sb.append("ideren");
System.out.println(sb);//输出niubideren
sb.delete(2,5);
System.out.println(sb);//输出nideren
}
}
- 清空缓冲区sb.delete(0,sb.length);
public class demo1 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("niubi");
sb.replace(0,3,"sha");
System.out.println(sb);//输出shabi
sb.reverse();
System.out.println(sb);//输出ibahs
}
}
Java中String和StringBuffer的参数传递
- 基本数据类型的值传递,不改变值。引用数据类型的值传递,改变其值。
- 所以我们平常使用StringBuffer来作为参数来传递。
public class demo1 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("niubi");
System.out.println(sb);
change(sb);
System.out.println(sb);
}
public static void change(StringBuffer sb){
sb.append("deren");//两个引用指向同一个对象
}
}
磊总结
- String类和StringBuffer类只是Java学习当中两个很基础的类,除此之外需要我们掌握的类仍然有很多多,养成仔细研究源码的习惯,查看API学习更多的类是我们学习Java的关键之一。



