String
- String类的两种实例化方法
- String类字符串常量与StringBuffer的区别
- String类对正则的支持
1.1字符串:
一串字符组成字符串,CharSequence是字符串的最高的父接口,常用的实现类有两个:
·String
·StringBuffer
不管是String对象还是StringBuffer的对象,都叫做字符串对象,简称字符串。
1.2类对象的实例化方式
两种实例化方式:
- ·通过直接赋值完成
- ·通过new关键字调用String的构造方法
String s1 = "张三";//直接使用赋值形式完成字符串对象实例化
String s2 = new String("张三");//通过new关键字实例化字符串对象
在开发中,我们一般只会使用第一种方式完成字符串的实例化,使用直接赋值的形式,会先去堆内存空间查找是否有相同内容的空间,如果有则直接指向此空间,如果没有则开辟新的空间并且赋值。
String类提供了length()方法用于取得字符串的长度。
package com.wanczy.stringDemo; public class StringDemo01 { public static void main(String[] args) { String s1 = "张三";//直接使用赋值形式完成字符串对象实例化 String s2 = new String("张三");//通过new关键字实例化字符串对象 System.out.println(s1.length());//取得字符串的长度 } }
注意:
对于字符串的比较,因为是对象,所以不能使用==来比较,必须使用equal()方法比较内容是否相同。
package com.wanczy.stringDemo; public class StringDemo01 { public static void main(String[] args) { String s1 = "张三";//直接使用赋值形式完成字符串对象实例化 String s2 = new String("张三");//通过new关键字实例化字符串对象 System.out.println(s1); System.out.println(s2); System.out.println(s1 == s2);//比较堆内存空间的地址是否相同 System.out.println(s1.equals(s2));//比较字符串内容是否相同 "".equals(s1);//使用""围起来的就是字符串对象 } }
注意:字符串一旦申明,则无法改变,指的是堆内存空间的内容无法改变。
/*for (int i = 0; i < 100; i++) { s1 = s1+i;//效率非常低 }*/ StringBuffer sb = new StringBuffer(s1); for (int i = 0; i < 100; i++) { sb.append(i);//追加 } System.out.println(sb); }
String类的常用的操作方法有很多:
·构造方法
·public String(byte[] bytes):实例化字符串对象,参数是字节数组
·public String(byte[] bytes, Charset charset):以指定的编码格式将字节数组转换成字符串
·public String(byte[] bytes, int offset, int length):将字节数组的一部分转换成字符串
·public String(char[] value):将字符数组转换成字符串
·public String(char[] value, int offset, int count):将字符数组的一部分转换成字符串
·普通方法
·public String concat(String str) 和+号效果相同。
·public boolean endsWith(String suffix):是否以指定的字符串结尾,不支持正则
·public boolean equals(Object anObject):判断内容是否相同
·public byte[] getBytes():将字符串转化成字节数组
·public byte[] getBytes(Charset charset):转换成指定编码格式的字节数组
·public int indexOf(String str):是否存在指定的字符串,存在返回下标,不存在返回-1
·public boolean isEmpty():判断是否为空
·public int lastIndexOf(String str):返回最后一次出现的下标,不存在返回-1
·public int length():返回字符串长度
·public boolean matches(String regex):字符串匹配方法,支持正则
·public String replace(char oldChar, char newChar):进行单个字符替换
·public String replace(CharSequence target, CharSequence replacement):字符串替换
·public String replaceAll(String regex, String replacement):替换全部匹配的字符串
·public String replaceFirst(String regex, String replacement):替换第一个匹配的字符串
·public String[] split(String regex):字符串分割,支持正则分割
·public boolean startsWith(String prefix):判断是否以指定的字符串开始
·public String substring(int beginIndex, int endIndex):字符串截取,从beginIndex开始,到endIndex -1 结束
·public char[] toCharArray():转换成字符数组
·public String toLowerCase():所有的大写变小写
·public String toUpperCase():所有的小写变大写
·public String trim():去掉字符串前后空格
·public static String valueOf(基本数据类型):将基本数据类型转换成字符串
2.String类对正则的支持,主要是体现在支持正则的方法上面:
·匹配
·替换所有
·替换第一次匹配
·分割
package com.wanczy.stringDemo; public class StringDemo03 { public static void main(String[] args) { // String s = "12341a2432143"; // if(s.matches("\d+")){ // System.out.println("全部由数字组成"); // }else{ // System.out.println("不全部是由数字组成"); // } // String s = "asd2323asdf444sadf34"; // s = s.replaceAll("\d+", "大家好才是真的好");//替换全部匹配内容 // System.out.println(s); // String s = "asd2323asdf444sadf34"; // s = s.replaceAll("a", "大家好才是真的好"); // System.out.println(s); // String s = "asd2323asdf444sadf34"; // s = s.replaceFirst("\d+", "大家好才是真的好");//替换第一次匹配内容 // System.out.println(s); String s = "asd2 323a sdf 44 4s,adf 3,4"; String sa[] = s.split(" "); for (int i = 0; i < sa.length; i++) { System.out.println(sa[i]); } } }
3.总结
·String类对象的实例化
·要去理解String类的一些构造方法(byte数组转换成指定编码的字符串,char数组转换成字符串)
·将StringBuffer对象转换成String类对象(toString()方法,还有就是new String(StringBuffer sb))
·学会使用String类中的方法。