String和StringBuilder

String

String类在java.lang包下,所以使用的使用不需要导包

String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java程序中所有的双引号字符串,都是String类的对象

字符串的特点

  • 字符串不可变,他们的值在创建后不能被更改
  • 虽然String的值是不可变的,但是它们可以被共享
  • 字符串效果上相当于字符数组(char[ ]),但是底层原理是字节数组(byte[ ]

String构造方法

//直接赋值的方式创建字符串对象,内容就是abc
String str = "abc";

String对象的特点

以“ ”方式给出的字符串,主要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护、

String str1 = "abc";
String str2 = "abc";

在上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给str1参考;第二行则让str2直接参考字符串池中的String对象,也就是说它们本质上是同一个对象

字符串的比较

使用==作比较

  • 基本数据类型:比较的是数据值是否相同
  • 引用数据类型:比较的是地址值是否相同

字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫: equals()

  • public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串

遍历字符串

需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串

思路:

  1. 键盘录入一个字符串,用Scanner实现

  2. 遍历字符串,首先要能获取到字符串中的每一个字符

    • public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
  3. 遍历字符串,其次要能够获取到字符串的长度

    • public int length():返回此字符串的长度
    • 数组的长度:数组名.length
    • 字符串的长度:字符串对象.length()
  4. 遍历字符串的通用格式

    for(int i = 0; i < s.length(); i++) {
        s.charAt(i);	//就是指定索引处的字符值
    }
    

String常用方法

方法名 说明
public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写(用户名和密码)
public char charAt(int index) 返回指定索引出的char值
public int length() 返回此字符串的长度
compareTo(String anotherString) 按字典顺序比较两个字符串
indexOf(int ch, int fromIndex) 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。
isEmpty() 返回 true如果,且仅当 length()为 0
split(String regex) 将此字符串以regex分割
trim() 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格

StringBuilder概述

  • 如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较子的方式可以解决这个问题呢?答案是肯定的,我们可以通过Java提供的StringBuilder类就来解决这个问题。

  • StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的

String和StringBuilder的区别

  • String:内容是不可变的
  • StringBuilder:内容是可变的

StringBuilder构造方法

方法名 说明
public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str) 根据字符串的内容,来创建可变字符串的对象

例:

StringBuilder sb = new StringBuilder();	//无参构造
StringBuilder sb2 = new StringBuilder("hello");	//带参构造

StringBuilder的添加和反转方法

方法名 说明
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 返回相反的字符序列

例:

StringBuilder sb = new StringBuilder();
//添加
sb.append("hello");	
//链式编程
sb.append("hello").append("world");

//反转
sb.reverse();

StringBuilder和String相互转换

  1. StringBuilder转化为String

    public String toString():通过toString( )就可以实现把StringBuilder转化为String

  2. String转化为StringBuilder

    public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder

例:

StringBuilder sb = new StringBuilder("hello");
//StringBuilder转化为String
String str = sb.toString();

//String转换为StringBuilder
StringBuilder sb2 = new StringBuilder(str);

案例:字符串反转

/*
	实现字符串反转。返回值类型为String,参数为String str
*/
public static String myReverse(String s) {
    //在方法中用StringBuilder实现字符串的反转,并把结果转成String返回
    StringBuilder sb = new StringBuilder(s);
    sb.reverse();
    String s2 = sb.toString();
    return s2;
}
//简写
public static String myReverse(String s) {
    return new StringBuilder(s).reverse().toString();
}

StringBuilder常见方法

方法名 说明
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 返回相反的字符序列
public String toString() 通过toString()就可以实现把StringBuilder转化为String
length() 返回长度(字符数)
上一篇:JAVA基础复习1


下一篇:String,StringBuffer与StringBuilder