StringBuffer 和StringBuilder 和正则表达式,包装类

一.StringBuilder类

   1.为什么用StringBuilder?

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

   2.优点:内部会自动扩容,修改速度和性能开销优异,降低频繁修改字符串带来的性能损耗

   3.StringBuilder是专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个          数组上进行的,
   4.修改字符串的常见操作对应的方法:

StringBuilder  b = new StringBuilder()//创建对象
//增--append()
b.append("我爱java");

//删--delete()删除部分内容

b.delete(0,2);//删除下标0到2之间

//改replace()替换部分内容

b.replace(0,2,"例子");//替换下标0-2之间的内容

//插入insert()插入操作

 b.insert(0,"例子");//在下标0处插入内容

//翻转字符串reverse()

b.reverese();

通过调用toString方法将StringBuilder内容以字符串形式返回.

 System.out.println(b.toString());

 

5.StringBuffer 和StringBuilder的区别

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

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

二.正则表达式

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

1.基本语法

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

[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

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

   1.matches方法

String mail = "abc@baidu.cn";
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";

boolean match = mail.matches(regex);//检验邮箱

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

  2. split方法

String[] split(String regex)

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

案例

     

String str = "abc123def456ghi";
//按照数字部分拆分,获取其中每部分字母
String[] arr = str.split("[0-9]+");
System.out.println(Arrays.toString(arr));//[abc, def, ghi]

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

str = "123.456.789.023";
//拆分出所有的数字部分
arr = str.split("\\.");//.在正则表达式中表示任意字符,要注意转义!
System.out.println(Arrays.toString(arr));//[123, 456, 789, 023]

 注意:1)如果连续遇到拆分项,则会拆分出一个空字符串.但是在字符串末尾连续遇到则忽略.

            2) . 在正则表达式中表示任意字符,要注意转义

 3.replaceAll方法

String replaceAll(String regex,String str)

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

        String str = "abc123def456ghi";
        //将当前字符串中的数字部分替换为NUMBER
        str = str.replaceAll("[0-9]+","NUMBER");

三.Object类 

Object是所有类的顶级超类,其中有两个经常被子类重写的方法:

toString()与equals().

四.包装类

java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的形式存在.

  • 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object

  • Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.

  基本类型             包装类
* byte                   Byte
* short                  Short
* int                      Integer
* long                   Long
* float                   Float
* double               Double
* char                   Character
* boolean             Boolean

1.基本类型转化为包装类 

java推荐我们使用包装类的静态方法valueOf()将基本类型转换为包装类,而不是直接new

        int i = 123;       

        Integer i1 = Integer.valueOf(i);
        Integer i2 = Integer.valueOf(i);
        System.out.println(i1==i2);//true
        System.out.println(i1.equals(i2));//true

 Double则是直接new

        double d = 123.123;
        Double d1 = Double.valueOf(d);
        Double d2 = Double.valueOf(d);
        System.out.println(d1==d2);//false
        System.out.println(d1.equals(d2));//true

 2.包装类转换为基本类型

        int in = i1.intValue();
        double doub = i1.doubleValue();
        System.out.println(in);//123
        System.out.println(doub);//123.0

        in = d1.intValue(); //大类型转小类型可能存在丢精度!
        doub = d1.doubleValue();
        System.out.println(in);//123
        System.out.println(doub);//123.123

 3.包装类常用功能

     1)可以通过包装类获取其表示的基本类型的取值范围

int imax = Integer.MAX_VALUE;       int imin = Integer.MIN_VALUE;

long lmax = Long.MAX_VALUE;       long lmin = Long.MIN_VALUE;

     2)字符串转换为基本类型

       parseInt()                      parseDouble()

前提是该字符串正确描述了基本类型可以保存的值,否则会抛出常:NumberFormatException
       
        String str = "123";
        //String str = "123.123";//这个字符串不能解析为int值!
        int d = Integer.parseInt(str);
        System.out.println(d);//123
        double dou = Double.parseDouble(str);
        System.out.println(dou);//123.123

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值