一、基本知识点
1、String类型 是java库中的一个预定义的类,string不是基本类型,而是一个引用类型。引用类型相当于c等语言的指针类型。
2、String类型的简单方法使用
(1)求字符串长度
String message="welcome to java";
System.out.println("The length is "+message.length());
(2)从字符串中提取字符
按照字符串的索引序号进行提取
String message="welcome to java";
System.out.println("The char is "+message.charAt(4));
(3)连接字符串
字符串连接可以使用concat方法,也可以使用+号完成
使用concat方法:
String message="welcome to java";
String message1=" and java is fun";
System.out.println(message.concat(message1));
使用+号,注意使用+号时,至少一个操作数必须为字符串,非字符串会自动转换为字符串。
String message="welcome to java";
String message1=" and java is fun";
System.out.println(message+message1+666);
注意点:String常量连接常量还是常量,依然用常量池管理;但变量连接常量就是变量。
String a="abc";
String b="a";//b是常量
String c=b+"bc";//引用b的对象,此时b是变量 ;变量连接常量,c为变量
String d="a"+"bc";//常量连接常量,d为常量
System.out.println(a==c);//输出false
System.out.println(a==d);//输出true
(4)字符串的转换
大小写字母转换
String message="welcome to java";//转大写
System.out.println("Convert to uppercase "+message.toUpperCase());
String message1="WELCOME TO JAVA";//转小写
System.out.println("Convert to lowercase "+message1.toLowerCase());
(5) 从控制台读取字符串
Scanner input =new Scanner(System.in);
System.out.print("Enter words:");
String s1=input.next();
System.out.println("s1 is "+s1);
(6)字符串比较
比较两个字符串的内容是否相等,用equals方法,不用==,equals方法比较对象的内容,==比较的是对象的地址是否相等。
但是注意一下区别:
1)
String a="abc";
String b="abc";
System.out.println(a==b);
输出结果:
a,b均为常量,存放在常量池中,Java虚拟机会对常量池进行优化,由于a和b两个常量的值相同,因此他们会存放到一个空间地址中,即a和b这两个引用指向同一块内存。
2)注意:String的常量与变量的不同:
String a=new String("abc");
String b=new String("abc");
System.out.println(a==b);
输出结果:
new 定义了a,b两个不同的比那里,在内存堆中,内存地址不同,故输出false。
(7)获得子字符串
注意:String对象具有“内存值不可变”的特性
String a="123456789";
System.out.println(a.substring(0,5)); //输出12345
String b="123456789";
b=b.substring(0,5);//必须按照此写法,用b对象来接收截取后的结果
System.out.println(b);
注意String尽可能使用常量,避免使用变量。
(8)字符串和数字间的转换
将数值型字符串转换成数值型
String a="123";
int intValue=Integer.parseInt(a);
将数值型转换成字符串
int a=123;
String intValue=a+"";
System.out.println(intValue);
二、StringBuilder和StringBuffer类
StringBuilder和StringBuffer类比String类更加灵活。StringBuilder是线程不安全的,StringBuffer是线程安全的,StringBuffer的性能低于StringBuilder。
StringBuilder是字符串变量,是可改变的对象,当他进行字符串操作时,是在一个对象上操作的,不像String一样创建额外的对象。