首页 > 其他分享 >StringBuilder类

StringBuilder类

时间:2023-08-15 17:35:14浏览次数:35  
标签:String StringBuilder System str println out

StringBuilder类

由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为了解决这个问题,java提供了StringBuilder类.

package string;

/**
* 频繁修改字符串带来的性能损耗.
*/
public class StringDemo2 {
   public static void main(String[] args) {
       String str = "a";
       for(int i=0;i<10000000;i++){
           str = str + str;
      }
       System.out.println("执行完毕!");
  }
}

StringBuilder是专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的, 内部会自动扩容.修改速度和性能开销优异.并且提供了修改字符串的常见操作对应的方法:增删改插

package string;

/**
* java.lang.StringBuilder
* 专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的,
* 内部会自动扩容.修改速度和性能开销优异.并且提供了修改字符串的常见操作对应的方法:增删改插
*/
public class StringBuilderDemo1 {
   public static void main(String[] args) {
       String str = "好好学习java";

       //内部默认表示一个空字符串
//       StringBuilder builder = new StringBuilder();

       //复制给定字符串到StringBuilder内部
//       StringBuilder builder = new StringBuilder(str);//不是线程安全的
       StringBuffer builder = new StringBuffer(str);//是线程安全的
       /*
           好好学习java
           好好学习java,为了找个好工作!
           append:追加内容
        */
       builder.append(",为了找个好工作!");
       System.out.println(builder);//输出StringBuilder的内容

       //通过调用toString方法将StringBuilder内容以字符串形式返回.
       str = builder.toString();
       System.out.println(str);

       /*
           好好学习java,为了找个好工作!
           好好学习java,就是为了改变世界!
           replace:替换部分内容
        */
       builder.replace(9,16,"就是为了改变世界");
       System.out.println(builder);

       /*
           好好学习java,就是为了改变世界!
           ,就是为了改变世界!
           delete:删除部分内容
        */
       builder.delete(0,8);
       System.out.println(builder);

       /*
           ,就是为了改变世界!
           活着,就是为了改变世界!
           insert:插入操作
        */
       builder.insert(0,"活着");
       System.out.println(builder);

       //翻转字符串
       builder.reverse();
       System.out.println(builder);
  }
}

StringBuffer 和StringBuilder

– StringBuffer是线程安全的,同步处理的,性能稍慢

–StringBuilder是非线程安全的,并发处理的,性能稍快

 

package string;

/**
* StringBuilder修改字符串的性能
*/
public class StringBuilderDemo2 {
   public static void main(String[] args) {
       StringBuilder builder = new StringBuilder("a");
       for(int i=0;i<10000000;i++){
           builder.append("a");
      }
       System.out.println("执行完毕!");
  }
}

 

正则表达式

正则表达式是用来描述一个字符串的内容格式,使用它通常用来匹配一个字符串的内容是否符合格式要求.

基本语法

[]:表示一个字符,该字符可以是[]中指定的内容

例如:

[abc]  这个字符可以是a或b或c  [a-z]  表示任意一个小写字母  [a-zA-Z]  表示任意一个字母  [a-zA-Z0-9_]  表示任意一个数字字母下划线  [abc]  该字符只要不是a或b或c
预定义字符

.:"."表示任意一个字符,没有范围限制

\d:表示任意一个数字,等同于[0-9]

\w:表示任意一个单词字符,等同于[a-zA-Z0-9_]

\s:表示任意一个空白字符.

\D:表示不是数字

\W:不是单词字符

\S:不是空白字符

量词:
  • ?:表示前面的内容出现0-1次

    例如:

    [abc]? 可以匹配:a 或 b 或 c 或什么也不写

  • +:表示前面的内容出现1次以上

    [abc]+ 可以匹配:aaaaaaaaaa...或abcabcbabcbabcbabcbabbabab....

    但是不能匹配:什么都不写或abcfdfsbbaqbb34bbwer...

  • *:表示前面的内容出现任意次(0-多次)

    匹配内容与+一致,只是可以一次都不写.

  • {n}:表示前面的内容出现n次

    例如:

    [abc]{3} 可以匹配:aaa 或 bbb 或 aab

    不能匹配:aaaa或aad

  • {n,m}:表示前面的内容出现最少n次最多m次

    [abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc

    不能匹配:aaaaaa 或 aabbd

  • {n,}:表示前面的内容出现n次以上(含n次)

    [abc]{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcbabcba....

    不能匹配:aa 或 abbdaw...

  • ()用于分组,是将括号内的内容看做是一个整体

    例如:

    (abc){3} 表示abc整体出现3次. 可以匹配abcabcabc.

    不能匹配aaa 或abcabc

    (abc|def){3}表示abc或def整体出现3次.

    可以匹配: abcabcabc 或 defdefdef 或 abcdefabc

 

String支持正则表达式的相关方法

matches方法

boolean matches(String regex)

使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true.否则返回false

package string;

public class MatchesDemo {
   public static void main(String[] args) {
       /*
           邮箱的正则表达式
           用户名@域名
           [email protected]
           [a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+
        */
       String mail = "[email protected]";
       String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
       boolean match = mail.matches(regex);
       if(match){
           System.out.println("是邮箱");
      }else{
           System.out.println("不是邮箱");
      }
  }
}
split方法

String[] split(String regex)

将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回.

package string;

import java.util.Arrays;

public class SplitDemo {
   public static void main(String[] args) {
       String str = "abc123def456ghi";
       //按照数字部分拆分,获取其中每部分字母
       String[] arr = str.split("[0-9]+");
       System.out.println(arr.length);
       System.out.println(Arrays.toString(arr));

       str = "123,456,789,023";
       //拆分出所有的数字部分
       arr = str.split(",");
       System.out.println(Arrays.toString(arr));
       //如果连续遇到拆分项,则会拆分出一个空字符串.但是在字符串末尾连续遇到则忽略.
       str = ",,,123,,,456,789,023,,,,";
       //拆分出所有的数字部分
       arr = str.split(",");
       System.out.println(Arrays.toString(arr));

       str = "123.456.789.023";
       //拆分出所有的数字部分
       arr = str.split("\\.");//.在正则表达式中表示任意字符,要注意转意!
       System.out.println(Arrays.toString(arr));
  }
}
replaceAll方法

String replaceAll(String regex,String str)

将当前字符串中满足正则表达式的部分替换为给定内容

package string;

public class ReplaceAllDemo {
   public static void main(String[] args) {
       String str = "abc123def456ghi";
       //将当前字符串中的数字部分替换为#NUMBER#
       str = str.replaceAll("[0-9]+","#NUMBER#");
       System.out.println(str);
  }
}

 

标签:String,StringBuilder,System,str,println,out
From: https://www.cnblogs.com/worldTree/p/17631917.html

相关文章

  • String、StringBuilder、StringBuffer
    String、StringBuilder和StringBuffer是Java中用于处理字符串的类,它们之间有以下区别:不可变性:String类是不可变的,即创建后不能被修改。每次对String进行操作时,都会创建一个新的String对象。而StringBuilder和StringBuffer是可变的,可以进行修改和拼接操作。线程安全性:String......
  • String、StringBuilder和StringBuffer
       ......
  • String、StringBuffer和StringBuilder类的区别
    String在Java中字符串属于对象,Java提供了String类来创建和操作字符串。String类是不可变类,即当一个String变量被创建时,它将被存储在ConstantStringPool中。String之所以是不可变量,是因为,该类被fainal修饰在Java中,每一个非易失的变量都是线程安全的,因此String......
  • Java之String系列--String, StringBuffer, StringBuilder区别
    简介本文介绍Java的String,StringBuffer,StringBuilder的区别。项StringStringBufferStringBuffer线程安全性不可变。原因:value数组是final类型。因为不可变,所以每次操作生成新对象。因为不可变,所以每次操作生成新对象。原因:value数组是final类型。原因:其父类(AbstractStringBuilder......
  • 【后端面经-Java】String与StringBuffer与StringBuilder的比较
    目录1.String2.StringBuffer3.StringBuilder4.性能提升5.总结和比较面试模拟参考资料1.String不可变查看String源码如下:publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{/**Thevalueisusedforcharacterstora......
  • StringBuilder
    1publicclassdemo11{2publicstaticvoidmain(String[]args){3//StringBuilder可以看作为一个容器,创建之后里面内容可变4//1.创建对象5StringBuildersb=newStringBuilder();6//StringBuildersb=newStringBui......
  • StringBuilder()类、chatAt()、toString()方法
    Java1.StringBuffer和StringBuilder类和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。在使用StringBuffer类时,每次都会对StringBuffer对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使......
  • String、StringBuffer、StringBuilder 的区别?
    一.介绍String、StringBuffer、StringBuilder:  前言: String、StringBuffer、StringBuilder均在java.lang包下;String: 在Java中,String是一个特殊的引用类型,用于表示文本字符串。它提供了许多方法来操作和处理字符串,比如连接、截取、查找、替换等。String类......
  • Java 基础复习——StringBuffer 和 StringBuilder
    StringBuffer和StringBuilderStringBuffer类简介java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法和String相同,但StringBuffer是可变长度的StringBuffer是一个容器注意:StringBuffer的直接父类是AbstractStringBuilder有属......
  • Java中的String、StringBuilder和StringBuffer
    StringString为什么不可变?有什么好处?在Java中的String源码中,我们可以看到字符串String类就是char数组的封装,且字符char[]前面的修饰关键字是private和final。final决定了char数组是私有成员变量,不可以指向新的数组。private决定了该数组只能有String类内部访问,所以不可变。好......