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):将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串
遍历字符串
需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
思路:
键盘录入一个字符串,用Scanner实现
遍历字符串,首先要能获取到字符串中的每一个字符
- public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
遍历字符串,其次要能够获取到字符串的长度
- public int length():返回此字符串的长度
- 数组的长度:数组名.length
- 字符串的长度:字符串对象.length()
遍历字符串的通用格式
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相互转换
StringBuilder转化为String
public String toString():通过toString( )就可以实现把StringBuilder转化为String
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() | 返回长度(字符数) |