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);
}
}
}
}
京公网安备 11010502036488号