网站建设公司做的网站,安徽今天刚刚发生的新闻,深圳专业商城网站制作,如何做企业网站的排名Java---第八章 字符串String字符串的常用方法StringBuilder和StringBuffer常用方法 对比String 和StringBuilder 和 StringBuffer 字符串
String
特性#xff1a;
String 类位于java.lang包中#xff0c;无需引入#xff0c;可直接使用String 类是由final修饰的#xff… Java---第八章 字符串String字符串的常用方法StringBuilder和StringBuffer常用方法 对比String 和StringBuilder 和 StringBuffer 字符串
String
特性
String 类位于java.lang包中无需引入可直接使用String 类是由final修饰的表示String 类是一个最终类不能被继承String 类构建的对象不可再被更改
package org.device.Device;public class DeviceTest {public static void main(String[] args) {//当使用一个字面量给字符串赋值的时候首先会去字符串常量池里检测是否//存在其字面量如果存在//则直接使用这个字面量的地址赋值即可如果不存在//则需要在字符串常量池中创建这个字面量然后//再将地址赋值过去String s 超用心;s 在线学习;//这里的字符串拼接发生在堆内存上System.out.println(s);}
}常见的构造方法
public String(String original);public String(char value[]);public String(char value[],int offset,int count);public String(byte bytes[]);public String(byte bytes[].int offset,int length);public String(byte bytes[],Charset charset);//字符集分别解释
public String(String original);public static void main(String[] args) {String s 超用心在线学习;System.out.println(s);//这里会创建两个对象一个是字面量会在常量池中创建一个对象//另一个是new String()构造方法创建出来的对象String s1 new String(超用心在线学习);System.out.println(s1);}
}上面有String s “超用心学习”下面再创建就会先去常量池里查找发现有一个然后只创建一个堆内存对象 public String(char value[]);public String(char value[],int offset,int count);public static void main(String[] args) {char[] values {a,d,m,i,n};String s2 new String(values);System.out.println(s2);String s3 new String(values,1,3);//跳过1个再继续输出3个System.out.println(s3);}输出 admin dmi public String(byte bytes[]);public String(byte bytes[].int offset,int length);public static void main(String[] args) {byte[] bytes {97,98,99,100,101,102};String s4 new String(bytes);System.out.println(s4);String s5 new String(bytes,2,3);System.out.println(s5);}输出 abcdef cde 字节可以存储整数字符也可以用整数表示这个整数就是ASCII码对应的整数值
public String(byte bytes[],Charset charset);//字符集public static void main(String[] args) {byte[] bytes {97,98,99,100,101,102};Charset charset Charset.forName(UTF-8);String s6 new String(bytes,charset);//bytes编码为UTF-8System.out.println(s6);}字符串的常用方法
获取长度
public int length();//获取字符串长度举例 public static void main(String[] args) {String s1 超用心学习;int length s1.length();System.out.println(length);}字符串比较
public boolean equals(Object anObject);//比较两个字符串是否相等public boolean equalsIgnoreCase(String anotherString);
//忽略大小比较两个字符串是否相等举例 字符串之间比较时首先会看两个字符串的长度是否相等如果相等再看其中每个字符是否相等 public static void main(String[] args) {String s2 abc;String s3 abc;String s4 ABC;System.out.println(s2.equals(s3));System.out.println(s2.equals(s4));System.out.println(s2.equalsIgnoreCase(s4));}字符串大小写转换
public String toLowerCase();//转换成小写public String toUpperCase();//转换成大写举例 public static void main(String[] args) {String s2 abc;String s4 ABC;String s5 s2.toUpperCase();System.out.println(s5);String s6 s4.toLowerCase();System.out.println(s6);}获取字符在字符串中的下标
public int indexof( int ch);//获取指定字符在字符串中第一次出现的下标public int lastIndexof(int ch);//获取指定字符在字符串中最后一次出现的下标获取字符串在字符串中的下标
public int indexof(String str);//获取指定字符串在字符串中第一次出现的下标public int lastIndexof(String str);//获取指定字符串在字符串中最后一次出现的下标获取字符串中的指定下标的字符
public char charAt(int index);举例 public static void main(String[] args) {String s kliyaliyun.com;int index1 s.indexOf();//打印该字符串中第一个的下标System.out.println(index1);int index2 s.lastIndexOf();//打印该字符串中最后一个的下标System.out.println(index2);int index3 s.indexOf(.);int index4 s.lastIndexOf(.);boolean case1 (index1 index2);boolean case2 (index3 index4);boolean case3 (index3 - index2 1);boolean case4 (index1 0 index4 s.length());if(case1 case2 case3 case4){System.out.println(字符串s是一个邮箱地址);}System.out.println(s.charAt(0));//k}字符串截取
public String substring(int beginIndex);//从指定开始位置截取字符串直到字符串末尾public String substring(int beginIndex,int endIndex);
//从指定开始位置到指定结束位置截取字符串示例 字符串截取截取时使用左闭右开区间 [0,4 public static void main(String[] args) {String s Java是一门非常高深的语言;String sub1 s.substring(0,4);System.out.println(sub1);String sub2 s.substring(7);System.out.println( sub2);}输出 Java 非常高深的语言 字符串替换
public String replace(char oldChar,char newChar);
//使用新的字符替换字符串中旧的字符public String replace(CharSequence target,CharSequence replacement);
//使用替换的字符串来替换字符串中的字符串public String replaceAll(String regex,String replacement);
//使用替换的字符串来替换字符串中满足正则表达式的字符串示例 public static void main(String[] args) {String s hello world;String s1 s.replace(o,a);System.out.println(s1);String s2 s.replace(o,a);System.out.println(s2);String info a1b2c3d4;//regular expresssion 正则表达式//三至五位数字的正则表达式//[1-9][0-9]{2,4}//英文字符串的正则表达式//[a-zA-Z]// 表示任意长度String result info.replaceAll([0-9],);//把其字符串中的数字替换成空}获取字符数组
public char[] toCharArray();获取字节数组
public byte[] getBytes();.//获取字节数组public byte[] getBytes(Charset cahrset);//获取指定编码下的字节数组示例 public static void main(String[] args) {String s my god;char[] values s.toCharArray();for(int i0;is.length();i){System.out.println(values[i]);}byte[] bytes s.getBytes();for(int i0;ibytes.length;i){System.out.println(bytes[i]);}byte[] bytes1 s.getBytes(Charset.forName(GB2312));System.out.println(bytes1);}字符串拼接
public String concat(String str);//将字符串追加到末尾去除字符串两端的空白字符
public String trim();示例 public static void main(String[] args) {String s1 Hello;String s2 World;String s3 s1 s2;System.out.println(s3);String s4 s1.concat(s2);System.out.println(s4);String s5 ab cd ;String s6 s5.trim();//将字符串两端空格剪掉System.out.println(s6);}字符串分割
public String[] split(String regex);//将字符串按照匹配的正则表达式分割字符串匹配正则表达式
public boolean matches(String regex);//检测字符串是否匹配给定的正则表达式示例 public static void main(String[] args) {String s a1b2c3d4;String[] arr s.split([0-9]);for(int i0;iarr.length;i){System.out.println(arr[i]);}String personInfo 刘德华,男,53,很帅气;String[] arr1 personInfo.split(,);for(int i0;iarr1.length;i){System.out.println(arr1[i]);}String regex [a-z0-9];boolean match s.matches(regex);System.out.println(match);}不得不提到的intern()方法
public native String intern();示例 public static void main(String[] args) {String s1 超用心;String s2 在线学习;String s3 s1 s2;String s4 超用心在线学习;System.out.println(s3 s4);//false//将字符串s3放入常量池放入时会先检测常量池中是否存在s3字符串//如果s3已经存在了s5就直接使用s3的字符串地址即可//若不存在就在常量池中创建字符串s3String s5 s3.intern();System.out.println(s5 s4);//true}StringBuilder和StringBuffer
特性介绍
位于Java.lang包中无需引入可以直接使用是由final修饰的表示一个最终类不可以被继承所构建的对象可以实现字符序列的追加但不会产生新的对象只是将这个字符序列保存在字符数组中
构造方法 以StringBuilder为例这两个都一样的
public StringBuilder();//构建一个StringBuilder对象默认容量为16public StringBuilder(int capacity);//构建一个StringBuilder对象并指定初始化容量public StringBuilder(String str);
//构建一个StringBuilder对象并将指定的字符串存储在其中示例 public static void main(String[] args) {StringBuilder sb1 new StringBuilder();StringBuilder sb2 new StringBuilder(1024);StringBuilder sb3 new StringBuilder(超用心学习);}常用方法
追加
public StringBuilder append(String str);//将一个字符串添加到StringBuilder存储区public StringBuilder append(StringBuffer sb);
//将StringBuffer存储的内容添加到StringBuffer存储区中示例 public static void main(String[] args) {StringBuilder sb1 new StringBuilder(1024);sb1.append(超用心学习);sb1.append(1);sb1.append(1.0);sb1.append(true);sb1.append(a);System.out.println(sb1);}输出 超用心学习11.0truea 删除指定区间存储的内容
public StringBuilder delete (int start,int end);
//将StringBuilder存储区指定的开始位置到指定的结束位置直接的内容删除删除存储区指定下标位置存储的字符
public StringBuilder deleteCharAT(int index);示例 public static void main(String[] args) {StringBuilder builder new StringBuilder(abcdefg);builder.delete(1,5);//区间(1,5)不包括1和5System.out.println(builder);//afgbuilder.deleteCharAt(0);System.out.println(builder);//fg}在StringBuilder存储区指定偏移位置处插入指定的字符串
public StringBuilder insert(int offset,String str);将存储区的内容倒序
public StringBuilder reverse();示例 public static void main(String[] args) {StringBuilder builder new StringBuilder(admine);builder.reverse();System.out.println(builder);//enimdabuilder.insert(2,,);System.out.println(builder);//en,imda//需要注意的是length()方法返回的是char[]中使用的数量System.out.println(builder.length());//6}获取指定字符串在存储区中的位置
public int indexof(String str);//获取指定字符串在存储区中第一次出现的位置public int lastIndexof(String str);//获取指定字符串在存储区中最后一次出现的位置例题 将从控制台输入的数字转换成财务数字101,111001.25使用StringBuilder完成 public static void main(String[] args) {//将从控制台输入的数字转换成财务数字101,111001.25//使用StringBuilder完成Scanner sc new Scanner(System.in);System.out.println(请输入一串数字);double money sc.nextDouble();StringBuilder builder new StringBuilder();builder.append(money);int index builder.indexOf(.);//打印.的下标if(index3){for (int iindex-3;i0;i-3){builder.insert(i,.);}}System.out.println(builder.toString());}对比String 和StringBuilder 和 StringBuffer
都是用来处理字符串的在处理少量字符串的时候它们之间的处理效率几乎没有任何区别但是处理大量字符串时 由于String类的对象不可更改因此在处理字符串会产生新的对象对内存消耗较大。
StringBuilder和StringBuffer使用的是对字符串的字符数组内容进行拷贝不会产生新的对象因此效率较高。
而StringBuffer为了保证在多线程情况下字符数组中的内容正确使用在每个成员方法上面加了锁有锁就会增加消耗因此StringBuffer在处理效率上低于StringBuilder