String、StringBuffer、StringBuilder的区别
String:字符串常量 。
StringBuffer 与 StringBuilder是字符缓冲变量。
StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。StringBuilder 是在JDK1.5才加入的。jdk的实现中StringBuffer与StringBuilder都继承自AbstractStringBuilder。
1、String类型的字符串对象是不可变的,一旦String对象创建后,包含在这个对象中的字符系列是不可以改变的,直到这个对象被销毁。 2、StringBuilder和StringBuffer类型的字符串是可变的,不同的是StringBuffer类型的是线程安全的,而StringBuilder不是线程安全的 3、如果是多线程环境下涉及到共享变量的插入和删除操作,StringBuffer则是首选。如果是非多线程操作并且有大量的字符串拼接,插入,删除操作则StringBuilder是首选。毕竟String类是通过创建临时变量来实现字符串拼接的,耗内存还效率不高,怎么说StringBuilder是通过JNI方式实现终极操作的。 4、StringBuilder和StringBuffer的“可变”特性总结如下: (1)append,insert,delete方法最根本上都是调用System.arraycopy()这个方法来达到目的 (2)substring(int, int)方法是通过重新new String(value, start, end - start)的方式来达到目的。因此,在执行substring操作时,StringBuilder和String基本上没什么区别。
总的来说,三者在执行速度方面的比较:StringBuilder > StringBuffer > String。
1.使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。
2.使用StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
3.使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。
StringBuilder是一个类,可以用来处理字符串,最简单的用法:
StringBuilder sb=new StringBuilder(); sb.Append("123"); sb.Append("456"); string str=sb.ToString();
最后得到的str字符串的值就是"123456",这种用法要比直接字符串相加效率高,比如:
string s1=“123”; string s2=“456”; string str=s1+s2;
得到的结果相同,但在处理大规模的字符串的时候第二种方法效率会变低。
String的substring方法
public String substring(int beginIndex)返回该字符串从beginIndex开始到结尾的子字符串
public String substring(int beginIndex, int endIndex)返回该字符串从beginIndex到endIndex结尾的子字符串
import java.util.*; import java.lang.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String s = sc.nextLine(); StringBuilder sb = new StringBuilder(); sb.append(s); int size = s.length(); int addZero = 8 - size % 8; while ((addZero > 0) && (addZero < 8)) { sb.append("0"); addZero--; } String str1 = sb.toString(); while(str1.length() > 0){ System.out.println(str1.substring(0,8)); str1 = str1.substring(8); } } } }