4.String
1.概述
String是引用数据类型,在java中用于存放字符串
2.特点
-字符串不可变,它们的值在创建后不能被更改
-虽然String的值是不可变的,但是它们可以被共享
-字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])
3.构造方法
class StringDemo {
public static void main(String[] args) {
//public String(),创建一个空白字符串对象,不含有任何内容
String s1=new String();
System.out.println("s1="+s1); //输出结果为 s1=
//public String(char[] arr),根据字符数组的内容,来创建字符串对象
char[] arr={'a','b','c'};
String s2=new String(arr);
System.out.println("s2="+s2);//输出结果为 s2=abc
//public String(bytr[] arr1),根据字节数组的内容,来创建字符串对象
byte[] arr1={97,98,99};//97=a,98=b,99=c
String s3=new String(arr1);
System.out.println("s3="+s3);//输出结果为 s3=abc
//String s="abc";直接赋值的方式创建字符串对象,内容就是abc
String s4="abc";
System.out.println("s4="+s4);
}
}
4.String对象的特点
4.1.通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地域值不同
4.2.以””方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池种维护
4.3.存储分析
5.字符串的比较
使用**==**做比较
-基本类型:比较的是数据值是否相同
-引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
-public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是对象,所以参数直接传递一个字符串
6.案例
6.1遍历字符串
import java.util.Scanner;
public class Tttast {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
int len=s.length();
char[] arr=new char[len];
for(int i=0;i<len;i++){
arr[i]=s.charAt(i);
System.out.print(arr[i]+" ");
}
}
}
输入14567
运行结果为
1 4 5 6 7
6.2统计字符次数
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
int big=0,small=0,num=0;
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
if(ch>='A'&&ch<='Z'){
big++;
}else if(ch>='a'&&ch<='z'){
small++;
}else if(ch>='0'&&ch<='9'){
num++;
}
}
System.out.println("big:"+big);
System.out.println("small:"+small);
System.out.println("num:"+num);
}
}
输入:AA2022libo
输出:big:2
small:4
num:4
6.3拼接字符串
class StringTest01 {
public static void main(String[] args) {
int[] arr={1,2,3};
String s=Arr(arr);
System.out.println(s);
}
public static String Arr(int[] arr1){
String s="";
s+="[";
for(int i=0;i<arr1.length;i++){
if(i==arr1.length-1){
s+=arr1[i];
}else{
s+=arr1[i];
s+=", ";
}
}
s+="]";
return s;
}
}
输出:[1, 2, 3]
6.4字符串反转
class StringTest02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.next();
String sss=Arr(s);
System.out.println(sss);
}
public static String Arr(String ss){
char[] arr=new char[ss.length()];
String s="";
s+="[";
for(int i=ss.length()-1,j=0;i>=0;i--,j++){
arr[j] = ss.charAt(i);
if(i==0){
s +=arr[j];
}else {
s += arr[j];
s += ", ";
}
}
s+="]";
return s;
}
}
输入:abcde
输出:[e, d, c, d, a]
7.通过帮助文档查看String中的方法
即API查看
8.常用方法
1.0
0.boolean equals(Object anObject)
将此字符串与指定对象进行比较。 区分大小写,判断内容是否相等
1.boolean equalsIgnoreCase(String anotherString)
将此 String与其他 String比较,忽略案例注意事项。忽略大小写的判断内容是否相等
2.int indexOf(int ch)
返回指定字符第一次出现的字符串内的索引。索引从0开始,如果找不到,返回-1
3.int lastIndexOf(int ch)
返回指定字符的最后一次出现的字符串中的索引。索引从0开始,如果找不到,返回-1
4.String substring(int beginIndex)
返回一个字符串,该字符串是此字符串的子字符串。即截取指定范围的字符串
5.String substring(int beginIndex, int endIndex)
返回一个字符串,该字符串是此字符串的子字符串。即截取指定范围的字符串
6.String trim()
返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。即删除前后空格
public class StringDemo01 {
public static void main(String[] args) {
// boolean equals(Object anObject)区分大小写,判断内容是否相等
String s1="hello";
String s2="Hello";
System.out.println(s1.equals(s2));//false
// boolean equalsIgnoreCase(String anotherString)忽略大小写的判断内容是否相等
String s3="hello";
String s4="Hello";
System.out.println(s3.equalsIgnoreCase(s4));//true
// int indexOf(int ch)返回指定字符第一次出现的字符串内的索引。索引从0开始,如果找不到,返回-1
String s5="hello@java@li";
int index=s5.indexOf('@');
int index2=s5.indexOf('$');
int index5=s5.indexOf("java");
System.out.println(index+" "+index2+" "+index5);//5 -1 6
// int lastIndexOf(int ch)返回指定字符的最后一次出现的字符串中的索引。索引从0开始,如果找不到,返回-1
String s6="hello@java@li";
int index3=s6.lastIndexOf('@');
int index4=s6.lastIndexOf('$');
int index6=s6.lastIndexOf("java");
System.out.println(index3+" "+index4+" "+index6);//10 -1 6
// String substring(int beginIndex)返回一个字符串,该字符串是此字符串的子字符串。即截取指定范围的字符串
String s7="hello,李白";
// s7.substring(6)表示从索引6开始截取后面所有的内容
System.out.println(s7.substring(6));//李白
// String substring(int beginIndex, int endIndex返回一个字符串,该字符串是此字符串的子字符串。即截取指定范围的字符串
// s7.substring(0,5)表示从索引0开始截取,截取到索引5-1=4这个位置
System.out.println(s7.substring(0,5));//hello
// String trim()返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。即删除前后空格
String s8=" hello world ";
System.out.println(s8.trim());//hello world
}
}
2.0
0.String replace(char oldChar, char newChar)
返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。即替换字符串中的字符
1.int compareTo(String anotherString)
按字典顺序比较两个字符串。即比较两个字符串的大小
2.char[] toCharArray()
将此字符串转换为新的字符数组。即把字符串转换为字符数组
3.String concat(String str)
将指定的字符串连接到该字符串的末尾。
4.String toLowerCase()
将所有在此字符 String使用默认语言环境的规则,以小写。
5.String toUpperCase()
将所有在此字符 String使用默认语言环境的规则大写。
6.String[] split(String regex)
将此字符串分割为给定的 regular expression的匹配。即分割字符串,对于某些分割字符,需要转义,比如|\\等
public class StringDemo02 {
public static void main(String[] args) {
// String replace(char oldChar, char newChar)返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。即替换字符串中的字符
String s="hello world";
// s.replace()方法执行后,返回的结果才是替换过的
// 对s本身没有任何影响
String ss=s.replace("hello","Hello");
System.out.println(ss);//Hello world
System.out.println(s);//hello world
// 除非用s本身来接收替换的结果,s才会有变化
s=s.replace("hello","Hello");
System.out.println(s);//Hello world
// int compareTo(String anotherString)按字典顺序比较两个字符串。即比较两个字符串的大小
// 如果前者大,则返回正数,如果后者大,则返回负数,如果相等,则返回0
String s1="jcva";
String s2="java";
System.out.println(s1.compareTo(s2));//返回值是'c'-'a'=2的值
// char[] toCharArray()将此字符串转换为新的字符数组。即把字符串转换为字符数组
String s3="happy";
char[] arr=s3.toCharArray();
for(int i=0;i<s3.length();i++) {
System.out.print(arr[i] + " ");//h a p p y
}
// String concat(String str)将指定的字符串连接到该字符串的末尾。
String s4="李白";
s4 = s4.concat("爱").concat("写诗").concat("和喝酒");
System.out.println(s4);//李白爱写诗和喝酒
// String toLowerCase()将所有在此字符 String使用默认语言环境的规则,以小写。
String s5="Hello";
System.out.println(s5.toLowerCase());//hello
// String toUpperCase()将所有在此字符 String使用默认语言环境的规则大写。
System.out.println(s5.toUpperCase());//HELLO
// String[] split(String regex)将此字符串分割为给定的 regular expression的匹配。即分割字符串,对于某些分割字符,需要转义,比如|\\等
String s6="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
String[] s7=s6.split(",");
System.out.println(s7[0]);//锄禾日当午
for(String poem:s7){
System.out.print(poem+" ");//锄禾日当午 汗滴禾下土 谁知盘中餐 粒粒皆辛苦
}
String s8="C:\\Tast\\java";
String[] s9=s8.split("\\\\");
for(String luji:s9){
System.out.print(luji+" ");//C: Tast java
}
}
}
5.StringBuilder
1.概述
-StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器
-这里的可变指的是StringBuilder对象中的内容是可变的
2.构造方法
class StringBuilder01 {
public static void main(String[] args) {
//public StringBuilder(),创建一个空白的字符串对象,不含有任何内容
StringBuilder s1=new StringBuilder();
System.out.println("s1:"+s1+" "+s1.length());
//public StringBuilder(String str),根据字符串的内容,来创建可变字符串对象
StringBuilder s2=new StringBuilder("hello");
System.out.println("s2:"+s2+" "+s2.length());
}
}
输出:s1:0
s2:hello 5
3.添加和反转方法
class StringBuilder02 {
public static void main(String[] args) {
// 创建对象
StringBuilder s=new StringBuilder();
/* public StringBuilder append(任意类型);添加类型,并返回对象本身
StringBuilder s1=s.append("hello");
System.out.println("s:"+s);
System.out.println("s1:"+s1);
System.out.println(s==s1);
输出s:hello
s1:hello
true
*/
/* s.append("hello");
s.append("world");
s.append("java");
s.append(100);
System.out.println("s:"+s);
输出:helloworldjava100
*/
s.append("hello").append("world").append("java").append(100);
System.out.println("s:"+s);
// 输出:helloworldjava100
// public StringBuilder reverse();返回相反的字符序列
s.reverse();
System.out.println("s:"+s);
// 输出:s:001avajdlrowolleh
}
}
4.StringBuilder和String相互转换
4.1 StringBuilder转换为String
public String toString(_):通过toString()就可以实现把StringBuilder转换为Strng
StringBuilder s=new StringBuilder();
s.append("hello");
String s1=s;//这个是错误的
String s1=s.toString();
4.2 String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以把String转换为StringBuilder
String s="hello";
StringBuilder s1=s;//这个是错误的
StringBuilder s1=new StringBuilder(s);
5.案例
5.1拼接字符串
class StringBuilder03 {
public static void main(String[] args) {
int[] arr={1,2,3};
String s=Arr(arr);
System.out.println(s);
}
public static String Arr(int[] arr1){
StringBuilder s=new StringBuilder();
s.append("[");
for(int i=0;i<arr1.length;i++){
if(i== arr1.length-1){
s.append(arr1[i]);
}else{
s.append(arr1[i]).append(", ");
}
}
s.append("]");
String s1=s.toString();
return s1;
}
}
5.2字符串反转
```plain
class StringBuilder04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String ss=sc.next();
String sss=Arr(ss);
System.out.println(sss);
}
public static String Arr(String s){
// StringBuilder s1=new StringBuilder(s);
// s1.reverse();
// String s3=s1.toString();
// return s3;
return new StringBuilder(s).reverse().toString();
}
}
输入:1234
输出:4321