//StringBuilder/StringBuffer类。StringBuilder/StringBuffer类比String类更加灵活。可以给一个StringBuilder或StringBuffer中添加、插入或追加新的内容,
//但是String类一旦创建它的值也就确定了。
//StringBuffer类中修改缓冲区的方法是同步的,这意味着只有一个任务是被允许执行该方法,除此之外,StringBuilder类与StringBuffer类是很相似的。如果是多任务并发访问空间,就使用StringBuffer,
//因为你这种情况下需要同步以防止StringBuffer损坏。
//而如果是单任务的访问,使用StringBuilder会更有效。StringBuffer和StringBuilder中的构造方法以及其他方法几乎是完全一样的。
//StringBuilder类中有三个构造方法和30多个用于管理该构件器以及修改该构件器中字符串的方法。
//可以使用构造方法创建一个空的构建器或从一个字符串创建一个构建器
public class Demo_01 {
public static void main(String[] args) {
//添加字符.append
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Welcome ");
stringBuilder.append("to");
stringBuilder.append(" ");
stringBuilder.append("Java");
System.out.println(stringBuilder);
//插入字符到指定位置.insert
stringBuilder.insert(11, "HTML and ");
System.out.println(stringBuilder);
//删除字符.delete
//替换字符.replace
stringBuilder.delete(8, 11);
System.out.println(stringBuilder);
//删除指定下标
stringBuilder.deleteCharAt(8);
System.out.println(stringBuilder);
//颠倒字符串
stringBuilder.reverse();
System.out.println(stringBuilder);
//将指定位置替换
stringBuilder.setCharAt(0, 'w');
System.out.println(stringBuilder);
//*除了setChart方法之外,所有这些进行修改的方法都做两件事:
//改变字符串构建起的内容。
//返回字符串构件器的引用。
//可以用一条语句连续的使用
System.out.println(stringBuilder.reverse().delete(8, 11).replace(11, 15, "HTML"));
//如果一个字符串不需要任何改变则使用String而不要使用StringBuilder,String比StringBuilder更高效
}
}
package Demo03_16;
//toString、capacity、length、setLength和chartAt方法
public class Demo_02 {
//注意字符串的长度总是小于或等于构建器的容量,当长度超过构建器的容量时,构建器的容量会相应增加
//在计算机内部,字符串构建器是一个字符数组,因此构建器的容量就是数组的大小。如果容量超出构建器的容量,就用新的数组替换现有的数组
//可以使用new StringBuilder(initialCapacity)创建指定初始容量的StringBuilder。通过仔细地选择初始容量能够使程序更高效。
//如果容量总是大于构建器的实际使用长度,JVM将永远不需要为构建器重新分配内存,另一方面,如果容量过大将会浪费内存空间。
//可以使用trimToSize()方法将容量降到实际的水平
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder("Welcome to Java and Html!");
//将StringBuilder转化为,String
String chaString = stringBuilder.toString();
System.out.println(chaString);
//显示该stringBuilder的容量
System.out.println(stringBuilder.capacity());
//显示对应索引的字符
System.out.println(stringBuilder.charAt(1));
//显示长度
System.out.println(stringBuilder.length());
//设置该构建器的新长度
stringBuilder.setLength(50);
System.out.println(stringBuilder.length());
//返回从startIndex开始的子字符串
System.out.println(stringBuilder.substring(4));
//返回从startIndex到endIndex-1的子字符串
System.out.println(stringBuilder.substring(0, 5));
//减少用于字符串构建器的存储大小
stringBuilder.trimToSize();
System.out.println(stringBuilder.capacity());
}
}
import java.util.Scanner;
//判断回文时忽略既非字母又非数字的字符
public class Demo_03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a string: ");
//传值
String string = input.nextLine();
System.out.println("忽略大小写,\nis " + string + "是一个回文串? \n" + (isPalindrome(string) ? "是的":"不是"));
}
//判断是否是回文
public static boolean isPalindrome(String s) {
//将非字母或非数字过滤
String s1 = filter(s);
//颠倒s1
String s2 = reverse(s1);
//判断颠倒后与颠倒前是否一样并返回结果
return s2.equals(s1);
}
private static String reverse(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
stringBuilder.reverse();
return stringBuilder.toString();
}
//留下字母或数字
private static String filter(String s) {
//创建一个String构造器
StringBuilder stringBuilder = new StringBuilder();
//遍历该字符串,若是字母或数字则添加到该构造器中
for (int i = 0; i < s.length(); i++) {
if (Character.isLetterOrDigit(s.charAt(i))) {
stringBuilder.append(s.charAt(i));
}
}
//将该构造器转化为字符串并返回
return stringBuilder.toString();
}
}
package Demo03_16;
public class Demo_04 {
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder("Hello");
System.out.println(s1);
//replace方法可以在索引位置处直接插入另外一个字符串
s1.replace(0, 2, "看起来真不戳");
System.out.println(s1);
String string = "Java";
StringBuilder builder = new StringBuilder(string);
System.out.println(string);
change(string, builder);
System.out.println(builder);
}
private static void change(String s, StringBuilder builder) {
s = s + "and HTML";
builder.append(s);//直接加到前面
}
}