我们知道字符串是一个对象,String 不是基本类型,而是引用类型,是Java库中预定义的一个类。String类中有13个构造方法以及40多个处理字符串的方法。
一些最基本方法的在这篇博客有介绍,可以去查阅:熟练Java,这些基本类和函数一定要掌握下面介绍进一步的Stirng类
一、构造一个字符串
可以用字符串直接量或字符数组创建一个字符串对象
-
用字符串直接量创建一个字符串对象
语法:String newString = new String(stringLiteral);
例如:String message = new String(’'Weicome to Java");
又Java将字符串直接量看作String对象。所以,一般用下面的语句:
String message = “WelcometoJava”; -
用字符数组创建一个字符串。
例如,下述语句构造一个字符串"GoodDay":
char[] charArray = {‘C’,‘o’,‘o’,‘d’,’’,‘0’,‘a’,‘y’};
String message = new String(charArray);
注意:
- String变量存储的是对String对象的引用
- String对象里存储的才是字符串的值。
严格地讲,术语String变量、String对象和字符串值是不同的。但在大多教情况下, 它们之间的区别是可以忽略的。为简单起见,术语字符串将经常被用于指String变量、 String对象和字符串的值。
二、不可变字符串与限定字符串
String对象是不可变的,一旦创建,它的内容是不能改变的;
对具有相同字符序列的字符串直接量使用同一个实例。这样的实例称为限定的(interned)字符串。
1.不可变字符串
看这个例子:下列代码会改变字符串的内容吗?
String s = "Java";
s ="HTML";
这个代码没有改变字符串s的内容,只是将s指向了另一个字符串对象
第一条语句创建了一个内容为"]ava "的String对象,并将其引用赋值给 S;
第二条语句创建了一个内容为"HTML"的新String对象,并将其引用赋值给s。
赋值后第一个String对象仍然存在,但是不能再访问它,因为变量s现在指向了新的对象。
2.限定字符串
因为字符串在程序设计中是不可变的,但同时又会频繁地使用,
所以Java虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串直接量使用同一个实例。这样的实例称 为限定的(interned)字符串。
例如,下面的语句:
- 程序结果显示:
s1 == s2 is false ;
s1 == s3 is true ; - 结果分析:
由于s1和s3指向相同的限定字符串"WelcometoJava",因此, sl == s3为true。
但是,s1 == s2为false, 这是因为尽管s1和s2的内容相同,但它们是不 同的字符串对象。 (s2创建了一个新的字符串对象)
三、字符串的替换和分隔
String 类提供替换和分隔字符串的方法
不是说—旦创建了字符串,它的内容就不能改变,那这里是如何变化的?
这里方法 repalce、replaceFirst 和 replaceAll 会返回一个源自原始字符串的新字符串(并未改变原始字符串!) 。
正则表达式(regular expression)(缩写 regex)是一个字符串,用于描述匹配一个字符串集的模式。 可以通过指定某个模式来匹配、替换或分隔一个字符串。 这是一种非常有用且功能强大的特性。
四、字符串与数组之间的转换
字符串不是数组,但是字符串可以转换成数组,反之亦然
1.字符串-----> 字符数组,
1.String.toCharArray( ) 方法。
例如,下述语句将字符串"]ava"转换成一个数组:
char[] chars = “Java”. toCharArray()
2. String . getChars(int srcBegin.int srcEnd,char[]dst,int dstBegin)
下标 从 srcBegin 到 srcEnd -1的子串复制到字符数组 dst 中下标从 dstBegin开始的位置.
举例:
2.字符数组----->字符串
- 构造方法 StMng(Char[])
例如,下面的语句使用String 构造方法由一个数组构造一个字符串:
String str = String.valueOf(new char[]{
'3', 'a', 'v', 'a'});
- ** 方法String . value0f(char[]) **
下面的语句使用 valueOf()方法由一个数组构造一个字符串:
String str = String.valueOf(new char[]{
'3', 'a', 'v', 'a'});
五、将字符和数值转换成字符串
- 可以使用Double.parseDouble(str)或者Integer.parselnt(str)将一个字符 串转换为一个double值或者一个int 值,
- 也可以使用字符串的连接操作符来将字符或者数字转换为字符串。
- 另外一种将数字转换为字符串的方法是使用重载的静态 valueOf() 方法。
该方法可以用于将字符和数值转换成字符串,如下图所示:
例如为了将 double值 5.44转换成字符串,可以使用String.value0f(5.44) 。 返回值 是由字符‘5’ ,’ . ’ ‘4’ , ’ 4 '构成的字符串。
六、格式化字符串
String类包含静态 format 方法,它可以创建一个格式化的字符串。
调用该方法的语法是:
String.format(format,iteml,item2 itemk);
举例:
这个方法很像printf 方法,只是 format方法返回一个格式化的字符串,而printf 方法显示一个格式化的字符串。
因此:
System.out.printf(format, iteml, i t e m2, … ,itemk);
等价于
System.out.print( String,format(format, iteml, it e m2, … ,itemk));
另外Java还提高了一个类似String类的StringBuilder类
对其的介绍可参考此链接:Java字符串类StringBuilder的简单介绍及常用方法小结