认识String类

本文详细介绍了Java中字符串的构造方法,包括使用常量、newString和字符数组,以及字符串的比较、大小写转换、查找、转化(如序列化、数字转换、大小写转换等)、截取、trim和不可变性。此外,还对比了StringBuilder和StringBuffer的异同,强调了在字符串频繁修改场景下的使用选择。
摘要由CSDN通过智能技术生成

1.字符串构造 

public static void main(String[] args) {
String s1 = "hello bit";        // 使用常量串构造
System.out.println(s1);
String s2 = new String("hello bit");   // 直接newString对象
System.out.println(s1);
char[] array = {'h','e','l','l','o','b','i','t'};  // 使用字符数组进行构造
String s3 = new String(array);
System.out.println(s1);
}

2.在Java中“”引起来的也是String类型对象

String str4 = ""

System.out.println("输出:"+str4);  //输出“输出:”
System.out.println(str4.length()); //输出0
System.out.println(str4.isEmpty()); //输出true
System.out.println("hello".length()); // 打印"hello"字符串(String对象)长度,5

String str5 = null; //不指向任何对象
System.out.println(str5.isEmpty()); //空指针异常

3.String的比较

1)==比较是否引用同一个对象
   对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址。

int a = 10;
int b = 20;
int c = 10;
// 对于基本类型变量,==比较两个变量中存储的值是否相同
System.out.println(a == b); // false
System.out.println(a == c); // true
// 对于引用类型变量,==比较两个引用变量引用的是否为同一个对象
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
String s4 = s1;
System.out.println(s1 == s2); // false,地址不同
System.out.println(s2 == s3); // false
System.out.println(s1 == s4); // true 
}

2)String类重写了父类Object中equals方法,返回Boolean类型

Object中equals默认按照==比较,比如s1.equals(s2)

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);   // false,地址不同
System.out.println(s1.equals(s2)); //被String重写了,比较的是字符串是否相同
                                   //输出true

ps:若是直接赋值,那么它直接被放入字符串常量池

String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);     // true
System.out.println(s1.equals(s2));  //true

3)判断字符串的大小:compareTo方法,对应字符进行比较,返回int类型

  对应字符不一样,比较对应字符ASCII值,

  对应字符长度不一样,长的大

  若s1>s2,返回大于0的数字;si1<s2返回小于0的数字,返回值即为ASCII的差值

String s1 = new String("hello");
String s2 = new String("aello");
System.out.println(s1.compareTo(s2)); //输出7
                                      //h的ASCII大于a,返回大于0的数

4)忽略大小写进行比较:IgnoreCase

String s1 = new String("hello");
String s2 = new String("Hello");
System.out.println(s1.equals(s2));   //false
System.out.println(s1.equalsIgnoreCase(s2));  //true


String s1 = new String("hello");
String s2 = new String("aello");
System.out.println(s1.compareTo(s2)); //输出32
System.out.println(s1.compareToIgnoreCase(s2)); //输出0

4.字符串查找

char charAt(int index) //返回字符串对应下标的字符,index为负数或者越界,报错

int indexOf(int ch) //返回ch第一次出现的位置,没有返回-1

int indexOf(int ch, intfromIndex) //从fromIndex位置开始找ch第一次出现的位置,没有返回-1

int indexOf(String str) 返回str第一次出现的位置,没有返回-1

int indexOf(String str, intfromIndex) //从fromIndex位置开始找str第一次出现的位置,没有返回-1

int lastIndexOf(int ch) 从后往前找,返回ch第一次出现的位置,没有返回-1

int lastIndexOf(int ch, intfromIndex)从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1

int lastIndexOf(String str) 从后往前找,返回str第一次出现的位置,没有返回-1

int lastIndexOf(String str, intfromIndex)从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

5.转化,字符串的转化都产生了新的对象

1)序列化:对象->字符串,反序列化:字符串->对象

String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);
String s4 = String.valueOf(new Student("Hanmeimei", 18));

2)

// 字符串转数字
// Integer、Double等是Java中的包装类型
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);
System.out.println(data2);

3)大小写转化

public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.toUpperCase());  // 小写转大写,产生了新的对象
System.out.println(s2.toLowerCase());  // 大写转小写
}

4)字符串转数组

public static void main(String[] args) {
String s = "hello";
char[] ch = s.toCharArray();  // 字符串转数组
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]);
} 
System.out.println();
String s2 = new String(ch);  // 数组转字符串
System.out.println(s2);
}

5)格式化

public static void main(String[] args) {
String s = String.format("%d-%d-%d", 2019, 9,14);
System.out.println(s);
}
  //输出2019-9-14

6.字符串替换

String replaceAll(String regex, String replacement) //替换所有的指定内容
String replaceFirst(String regex, String replacement) //替换收个内容

7.字符串拆分

String[] split(String regex) //将字符串全部拆分
String[] split(String regex, int limit) //将字符串以指定的格式,拆分为limit组

1)部分拆分

String str = "zhangsan&name" ;
String[] result = str.split("&") ; // 按照&拆分
for(String s: result) {
System.out.println(s);
}    //输出张三 name

2)全部拆分

S
tring str = "hello world yep " ;
String[] result = str.split(" ",2) ; 
 //如果分割次数太多,不能分割那么多次,只能保证够分割的
String[] result = str.split(" ",42) ;  

for(String s: result) {
System.out.println(s);
}  //输出hello                   //输出为hello
         world yep                      world
                                        yep

3)拆分IP地址

String str = "192.168.1.1" ;
String[] result = str.split("\\.") ; //根据点号分割
for(String s: result) {
System.out.println(s);
}

ps:a.字符"|","*","+"都得加上转义字符,前面加上 "\\" .
       b. 而如果是 "\" ,那么就得写成 "\\\\" .
       c. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

4)多次分割

String str = "name=zhangsan&age=18" ;
String[] result = str.split("&") ; //[o]=name=zhangsan,[1]=age=18
for (int i = 0; i < result.length; i++) {
String[] temp = result[i].split("=") ;   //再以=分割
System.out.println(temp[0]+" = "+temp[1]);
}                
//输出:name
       zhangsan
        age
        18

8.字符串截取

String substring(int beginIndex) 从指定索引截取到结尾
String substring(int beginIndex, int endIndex) 截取部分内容,一般为【)

9.

String trim() //去掉字符串中的左右空格,保留中间空格


String str = " hello world " ;
System.out.println("["+str+"]");
System.out.println("["+str.trim()+"]");

10.String不可变性

1)String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改

2)String类中的字符实际保存在内部维护的value字符数组中

    a. String类被final修饰,表明该类不能被继承
    b. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

3)所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

9. StringBuilder和StringBuffer

String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可
以修改。频繁修改字符串的情况考虑使用StringBuilder
 

1.append拼接

StringBuff append(String str) //在尾部追加,相当于String的+=
public static void main(String[] args) {
 StringBuilder sb1 = new StringBuilder("hello");
 StringBuilder sb2 = sb1;
 sb1.append(' '); // hello
 sb1.append("world"); // hello world
 sb1.append(123); // hello world123
 System.out.println(sb1); // hello world123
}

2.String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
           1)String变为StringBuilder: 利用StringBuilder的构造方法或append()方法


           2)StringBuilder变为String: 调用toString()方法

3.String、StringBuffer、StringBuilder的区别
  1)String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
  2)StringBuffer与StringBuilder大部分功能是相似的
  3)StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值