String类
创建String字符串的方式:
最简单的字符串创建方式:
String str = "Hello World!";
在代码中遇到字符串常量时,这里的值是 "Hello World!",编译器会使用该值创建一个 String 对象。
和其它对象一样,可以使用关键字和构造方法来创建 String 对象。
String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:
public class StringDemo{
public static void main(String args[]){
char[] helloArray = { 'H', 'e', 'l', 'l', 'o', ' ','W','o','r','l','d','!'};
String helloString = new String(helloArray);
System.out.println( helloString );
}
}
以上实例编译运行结果如下:
Hello World!
String类提供的方法:
String类提供的方法
方法 | 作用 |
返回指定索引处的 char 值。 | |
把这个字符串和另一个对象比较。 | |
按字典顺序比较两个字符串。 | |
按字典顺序比较两个字符串,不考虑大小写 | |
将指定字符串连接到此字符串的结尾。 | |
当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真 | |
返回指定数组中表示该字符序列的 String。 | |
static String copyValueOf(char[] data, int offset, int count) | 返回指定数组中表示该字符序列的 String |
测试此字符串是否以指定的后缀结束 | |
将此字符串与指定的对象比较。 | |
将此 String 与另一个 String 比较,不考虑大小写。 | |
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中 | |
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 | |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此字符串复制到目标字符数组。 |
返回此字符串的哈希码。 | |
返回指定字符在此字符串中第一次出现处的索引。 | |
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索 | |
返回指定子字符串在此字符串中第一次出现处的索引。 | |
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 | |
返回字符串对象的规范化表示形式。 | |
返回指定字符在此字符串中最后一次出现处的索引 | |
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索 | |
返回指定子字符串在此字符串中最右边出现处的索引。 | |
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 | |
返回此字符串的长度 | |
告知此字符串是否匹配给定的正则表达式 | |
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) | 测试两个字符串区域是否相等。 |
boolean regionMatches(int toffset, String other, int ooffset, int len) | 测试两个字符串区域是否相等。 |
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的 | |
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 | |
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 | |
根据给定正则表达式的匹配拆分此字符串。 | |
根据匹配给定的正则表达式来拆分此字符串 | |
测试此字符串是否以指定的前缀开始。 | |
测试此字符串从指定索引开始的子字符串是否以指定前缀开始 | |
返回一个新的字符序列,它是此序列的一个子序列。 | |
返回一个新的字符串,它是此字符串的一个子字符串 | |
返回一个新字符串,它是此字符串的一个子字符串 | |
将此字符串转换为一个新的字符数组 | |
使用默认语言环境的规则将此 String 中的所有字符都转换为小写 | |
使用给定 Locale 的规则将此 String 中的所有字符都转换为小写 | |
返回此对象本身(它已经是一个字符串!)。 | |
使用默认语言环境的规则将此 String 中的所有字符都转换为大写 | |
使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 | |
返回字符串的副本,忽略前导空白和尾部空白。 | |
返回给定data type类型x参数的字符串表示形式。 |
1.String 类是不可改变的解析,例如:
String s = "Google";
System.out.println("s = " + s);
s = "Hello World!";
System.out.println("s = " + s);
输出结果为:
s=Google
s=Hello World!
从结果上看是改变了,但为什么我们说String对象是不可变的呢?
原因在于实例中的 s 只是一个 String 对象的引用,并不是对象本身,当执行 s = "Hello World!"; 创建了一个新的对象 "Hello World!",而原来的 "Google" 还存在于内存中。
2.length()方法,length属性和size()的方法的区别:
- length()方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;
- length属性是针对Java中的数组来说的,要求数组的长度可以用其length属性;
- java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
StringBuffer类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 Strin不同g 类的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
下面我们试着写一写:
public class Test{
public static void main(String args[]){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("Hello");
sBuffer.append(" World");
sBuffer.append("!");
System.out.println(sBuffer);
}
}
以上实例编译运行结果如下:
Hello World!
StringBuffer类提供的方法:
StringBuffer类提供的方法
方法 | 作用 |
public StringBuffer append(String s) | 将指定的字符串追加到此字符序列。 |
public StringBuffer reverse() | 将此字符序列用其反转形式取代。 |
public delete(int start, int end) | 移除此序列的子字符串中的字符。 |
public insert(int offset, int i) | 将 |
replace(int start, int end, String str) | 使用给定 |
下面的列表里的方法和 String 类的方法类似:
StringBuffer类提供的与String类中类似的方法
方法 | 作用 |
int capacity() | 返回当前容量。 |
char charAt(int index) | 返回此序列中指定索引处的 |
void ensureCapacity(int minimumCapacity) | 确保容量至少等于指定的最小值。 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 |
int indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引。 |
int indexOf(String str, int fromIndex) | 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
int lastIndexOf(String str) | 返回最右边出现的指定子字符串在此字符串中的索引。 |
int lastIndexOf(String str, int fromIndex) | 返回 String 对象中子字符串最后出现的位置。 |
int length() | 返回长度(字符数)。 |
void setCharAt(int index, char ch) | 将给定索引处的字符设置为 |
void setLength(int newLength) | 设置字符序列的长度。 |
CharSequence subSequence(int start, int end) | 返回一个新的字符序列,该字符序列是此序列的子序列。 |
String substring(int start) | 返回一个新的 |
String substring(int start, int end) | 返回一个新的 |
String toString() | 返回此序列中数据的字符串表示形式。 |
String与StringBuffer的区别
(1)String:是对象不是原始类型。为不可变对象,一旦被创建,就不能修改它的值。对于已存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。String 是final类,不能被继承。
(2)StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象被建立以后,在内存中就会分配内存空间,并初始保存一个null。向StringBuffer中赋值的时候可以通过它的append()方法.