java SE String类及StringBuilder/StringBuffer类

要点提示:String对象是不可改变的。字符串一旦创建,内容不能再改变。
通过学习字符串,我们知道字符串可以通过charAt(index)方法从字符串中得到某个指定位置的字符。length()方法返回字符串的大小,substring方法返回字符串中的子串,indexof 和lastIndexOf方法返回第一个或者最后一个匹配的字符或者子字符串。
Sting类中有13个构造方法以及40多个处理字符串的方法。

      构造方法 
        
      Constructor and Description 

String()
初始化新创建的 String对象,使其表示空字符序列。
String(byte[] bytes)
通过使用平台的默认字符集解码指定的字节数组来构造新的 String 。
String(byte[] bytes, Charset charset)
构造一个新的String由指定用指定的字节的数组解码charset 。
String(byte[] ascii, int hibyte)
已弃用
此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方法是通过String构造函数获取Charset ,字符集名称,或者使用平台的默认字符集。
String(byte[] bytes, int offset, int length)
通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。
String(byte[] bytes, int offset, int length, Charset charset)
构造一个新的String通过使用指定的指定字节子阵列解码charset 。
String(byte[] ascii, int hibyte, int offset, int count)
已弃用
此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方式是通过String构造函数获取Charset ,字符集名称,或使用平台的默认字符集。
String(byte[] bytes, int offset, int length, String charsetName)
构造一个新的 String通过使用指定的字符集解码指定的字节子阵列。
String(byte[] bytes, String charsetName)
构造一个新的String由指定用指定的字节的数组解码charset 。
String(char[] value)
分配一个新的 String ,以便它表示当前包含在字符数组参数中的字符序列。
String(char[] value, int offset, int count)
分配一个新的 String ,其中包含字符数组参数的子阵列中的字符。
String(int[] codePoints, int offset, int count)
分配一个新的 String ,其中包含 Unicode code point数组参数的子阵列中的 字符 。
String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。
String(StringBuffer buffer)
分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
String(StringBuilder builder)
分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。
下面来一一举例:
1、构造字符串
public class TestDemo {
public static void main(String[] args) {
String newString = new String(“Are you OK?”);
System.out.println(newString);
}
}
程序运行结果:
Are you OK?
java中将字符串直接量看作String对象。所以下面的语句也是合法的。
String newString = “Are you OK?”;
拓展:还可以用字符数组创建一个字符串。
public class TestDemo {
public static void main(String[] args) {
char[] charArray = {‘h’,‘e’,‘l’,‘l’,‘o’};
String message = new String(charArray);
System.out.println(message);
}
程序运行结果:
hello

2、不可变字符串与限定字符串
String对象是不可变的,它的内容是不能改变的。
String str = "hello";
    str = "hi";
    此代码不能改变字符串的内容,第二条语句创建了一个新的String对象,并将其引用赋值给str,赋值后第一个String对象任然存在,但是不能再访问它,str现在指向了新的对象。

在这里插入图片描述 java虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串直接量使用同一个实例。
String str1 = “hello”;
String str2 = new String(“hello”);
String str3 = “hello”;
System.out.println("str1 == str2 is "+ (str1 == str2));
System.out.println(“str1 == str3 is “+ (str1 == str3));
程序结果显示:
str1 == str2 is false
str1 == str3 is true
在这里插入图片描述
3、例举13种关于String类常用的方法
(1、)将字符串变成一个字符数组 :
public static void main(String[] args) {
String str = “helloWorld”;
char[] array = str.toCharArray();
for (int i = 0; i <array.length ; i++) {
System.out.print(array[i]+”、”);
程序运行结果:
h、e、l、l、o、W、o、r、l、d、
(2、)从字符串中取出指定位置的字符 :
public class TestDemo {
public static void main(String[] args) {
String str = “helloWorld”;
char c = str.charAt(5);
System.out.println(“指定字符为:” + c);
}
程序运行结果:
指定字符为:W
(3、)public class TestDemo {
public static void main(String[] args) {
String str = “helloWorld”;
int l = str.length();
System.out.println(“这个字符串的长度为:”+l);
}
程序运行结果:
这个字符串的长度为:10
(4、)查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1
public class TestDemo {
public static void main(String[] args) {
String str = “helloWorld”;
int a= str.indexOf(“l”);
int b = str.indexOf(“or”);
System.out.println(“l的位置:”+a);
System.out.println(“or的位置:”+b);
}
程序运行结果:
l的位置:2
or的位置:6

(5、)字符串的截取
public static void main(String[] args) {
String str = “helloWorld”;
String str2 = str.substring(3,5);//截取3-5之间字符串;
System.out.println(“截取后的字符为:”+str2);
System.out.println(“截取后的字符为:”+str.substring(2));//截取从2之后的字符串;
程序运行结果:
截取后的字符为:lo
截取后的字符为:lloWorld
(6、)按照指定的字符串拆分字符,拆分的数据将以字符串数组的形式返回
public static void main(String[] args) {
String str = “helloWorld”;
String s[] = str.split(“e”);
for (int i = 0; i <s.length ; i++) {
System.out.println(s[i]);
}
程序运行结果:
h
lloWorld
(7、)将字符串进行大小写转换
public static void main(String[] args) {
String str = “hello”;
String str2 = “HELLO”;
System.out.println(“将hello转换为大写:”+str.toUpperCase());
System.out.println(“将HELLO转换为小写:”+str.toLowerCase());
}
程序运行结果:
将hello转换为大写:HELLO
将HELLO转换为小写:hello
(8、)两个String类型内容比较
public static void main(String[] args) {
String str1 = “hello”;
String str2 = “hello”;
if(str1.equals(str2)){
System.out.println(“这俩个字符串相同”);
}else
System.out.println(“不相同”);
}
程序运行结果:
这俩个字符串相同
(9、)两个字符串不区分大小写进行比较
public static void main(String[] args) {
String str1 = “Hello”;
String str2 = “hello”;
if(str1.equalsIgnoreCase(str2)){
System.out.println(“忽略大小写比较 相同”);
}else
System.out.println(“不相同”);
}
程序运行结果:
忽略大小写比较 相同
(10、)将一个指定得到字符串替换成其他字符串
public static void main(String[] args) {
String str = “helloWorld”;
String str2 = str.replaceAll(“he”,“abc”);
System.out.println(str2);
}
程序运行结果:abclloWorld

3、String 与 StringBuilder 及StringBuffer 类的关系
一般来说,只要使用字符串的地方,都可以使用StringBuilder/StringBuffer类。
StringBuilder/StringBuffer类比String类更灵活,可以给一个StringBuilder/StringBuffer中添加、插入或追加新的内容,但是String对象一旦创建立,它的值就确定了。
StringBuffer类中提供的方法都是同步方法,属于安全的线程操作,而StringBuilder类中方法属于异步方法,属于非线程安全的操作。
StringBuilder 类提供了几个重载方法,可以将 boolean、char、char数组、
double、float、int、long、String类型值追加到字符串构建器。例如:
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(“Welcome”);
stringBuilder.append(’ ‘);
stringBuilder.append(“to”);
stringBuilder.append(’ ');
stringBuilder.append(“SuiDe”);
System.out.println(stringBuilder);
}

程序运行结果:Welcome to SuiDe
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值