要点:String对象是不可改变的。字符串一旦创建,内容不能再改变
String类中有13个构造方法以及四十多个处理字符串的方法。不仅在程序设计中很有用而且也是一个学习类和对象的一个很好的例子。
常用的构造方法:
(1)char[] charArray = {'G','O','O','D'};
String meaasge = new Stringa(charArray );
(2)String message = new String("Welcome to Java");
(3)String message = "Welcome to Java";
String变量存储的是对String对象的引用,String对象里才存储的是字符串的值。
String对象是不可变的,它的内容是不能改变的,那么以下是改变了它的内容吗?
String s = "Java"; s="HTML"
答案是不能,因为String变量是引用变量,第二条语句创建了一个内容为“HTML”的新String对象,并将其引用赋值给s,赋值后第一个String对象依然存在,但是不能再访问它了。因为变量s现在指向了新的对象。
因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以Java虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串字面值使用同一个实例。这样的实例称为驻留的(interned)字符串。
String s1 = "Welcome to Java";
String s2= new String("Welcome to Java");
String s3 = "Welcome to Java";
System.out.println("s1==s2 is "+(s1==s2));//false(内容相同却是不同的字符串对象)
System.out.println("s1==s3 is "+(s1==s3));//true(指向相同的驻留字符串)
比较两个字符串内容相不相同,需要的方法是s1.equals(s2) 而不是==,==比较的是两个引用值是否相同。
System.out.println("Welcome".replace('e', 'A'));//所有匹配的字符串换成新的字符
System.out.println("Welcome".replaceFirst("e", "A"));//第一个匹配的字符串换成新的字符串
System.out.println("Welcome".replaceAll("e", "AB"));//所有匹配的字符串换成新字符串
System.out.println("Welcome".replace("el", "AB"));//所有匹配的字符串换成新字符串
运行结果:
String[] tokens = "Java#HTML#Perl".split("#");
for(int i=0;i
运行结果:
用代码来验证用户输入,简单有效完成该任务的方法是使用正则表达式。
正则表达式是一个字符串,匹配一个字符串集的模式
System.out.println("Java".matches("Java"));
System.out.println("Java".equals("Java"));
System.out.println("Java is fun".matches("Java.*"));//Java.*是正则表达式,描述的字符串模式是以字符串Java开始的.*表示与0个或多个字符相匹配
System.out.println("Java is cool".matches("Java.*"));
System.out.println("440-02-4534".matches("\\d{3}-\\d{2}-\\d{4}"));//\\d{3}表示三个数字
System.out.println("a+b$#c".replaceAll("[$+#]","NNN"));
运行结果:
将String Java转换成 字符数组‘J’‘a’‘v’‘a’
char[] chars = "Java".toCharArray();
将字符数组转换成一个字符串
String str = new String(new char[]{'J','a','v','a'});
StringBuilder和StringBuffer类类似于String类,区别在于String类是不可改变的。