javaSE(String和StringBuilder,正则表达式+少量的Object类)

package com.secheng.javaBase;

import org.junit.Test;

public class TestStringBuilder {
    
    //测试StringBuilder封装的是可变对象
    
    public void testStringBuilder(){
        //手动修改StringBuilder对象的值,看是否创建新的对象
        StringBuilder buf = new StringBuilder("1234");
        //借助append方法修改StringBuilder对象的值
        System.out.println(buf.hashCode());
        /*
         * Object的hashcode方法默认返回内存地址,但是hashCode是可以重写的
         * 所以不能说hashCode代表内存地址
         * 改变StringBuilder对象的值之后,内存地址并改变,证明,StringBuilder对象封装的是可变对象
         * */
        buf.append("567");
    }
    
    public void testInsert(){
        StringBuilder buf = new StringBuilder("Programming Language");
        buf.insert(9, "php");
        //system语句会默认调用toString方法.
        System.out.println(buf);
    }
    
    public void testDelete(){
        StringBuilder buf1 = new StringBuilder("Programming Language");
        buf1.delete(4, 4+6);
        //含头不含尾    
        System.out.println(buf1);
        //StringBuilder的方法返回的依旧是StringBuider类型,所有StringBuilder的方法可以连缀使用
    }
    
    public void testMethod(){
        StringBuilder buf = new StringBuilder("Programming Language");
        buf.append("java").insert(3, "oracle").replace(9, 13, "JAVA");
        System.out.println(String.valueOf(buf));
    }
    @Test
    //思考:字符串拼接是否会创建新的对象
    public void testStringAndStringBuilder(){
        String a = "ABC";
        System.out.println(a.hashCode());
//        System.out.println((a+ "456").hashCode());
        StringBuilder str = new StringBuilder(a);
        System.out.println((str+"de"+"ab").hashCode());
        /*小结:
         * 1.字符串拼接会创建新的字符串对象,内存地址发生改变
         * 2.StringBuilder和字符串拼接,StringBuilder会先转换成String对象在进行拼接,
         * 会创建新的String对象,地址发生改变
         * StringBuilder是可变字符串,按字符串的内存计算,建议采用StringBuilder实现,这样性能会更好一些
         * 
         * */
Java的字符串拼接过程本质是利用StringBuildr而实现的.
        String s = "AB";
        String s1 = s+"DE";
        s1 = new StringBuilder(s).append("DE").toString();
    }
}

StringBuilder 和 StringBuffer
两者功能一样,可以对字符串进行操作
StringBuilder是非线程安全的,同步处理的,性能稍kuai.
StringBuffer线程安全的,并发处理的,性能稍慢.

正则表达式:
简介:
实际开发中,经常需要对字符串数据进行一些复杂的匹配,查找,替换等操作.
通过"正则表示式",可以方便的实现字符串的复杂操作
正则表达式是一串特定的字符,组成一个"规则字符串",这个"规则字符串"是描述文本规则的工具,
正则表达式就是记录文本规则的代码
例如:o
正则表示式:"[a-z]+"  表示一个a到的任意一个或多个字符
正则表示式:"[a-z]"  表示一个a到的任意一个字符
[abc]:a,b,c中任意一个字符
[^abc]:除了a,b,c的任意一个字符
[a-zA-Z0-9]:表示a-z,A-Z,0-9中的任意一个字符
[a-z&&[^bc]]:a-z除了bc以外的任意一个字符 

预定义符集
.  任意一个字符(不建议使用)
\d 任意一个数字字符
\w 单词字符,相当于[a-zA-Z0-9_]数字也可以成为单词字符
\s 空白字符
\D 非数字字符 
\W 非单词字符
\S 非空白字符

数量词
X?:表示0个或1个X
x*:表示0个或任意多个*
X+:表示1个到任意多个X(大于等于1个X)
X{n}:表示n个X
X{n.m} 表示n个到m个X

练习:
检索邮政编码 6位纯数字
写出3种匹配方法:
最复杂的一种:[0-9][0-9][0-9][0-9][0-9][0-9]
稍微简单的一种:\d\d\d\d\d\d\d
简单一种:\d{6}

分组:()圆括号表示分组,可将一系列正则表达式看成一个整体,分组是可以使用"|"表示"或"的关系

检索电话号码 +0086 15807936346

(\+86|\+0086)?\s*\d{11}
(\\+86|\\+0086)?\\s*\\d{11}

"^"和"$"
.边界匹配
.^代表字符串开始
.$代表字符串结束

匹配用户名规则从头到尾练习8-10个单词字符
//匹配用户名规则从头到尾练习8-10个单词字符
        String reges ="\\w{8,10}";
        String reges ="^\\w{8,10}$";
        String a ="123_baba";
        System.out.print(a.matches(reges));
^和&这两个符号加在正则表达式上表示对该表达式从头到尾的整体限定,使得正则表达式更加精准,
但对于大部分工具而言,已经失效.

.matches(regex):将一个字符串与正则表达式进行匹配
匹配成功返回true,否则放回false.
正则表达式
1623883548@qq.com
\d{10}\@qq.com

.split方法
.String的split方法可以将字符串按照特定的分隔符拆分成字符串数组
语法:String[] split[String regex]
参数regex为正则表达式,以regex所表示的字符串分隔符,将字符串拆分成字符串数组

String str = "3,sicheng,4,    huawei";
        String[] strArr =  str.split(",\\s*");
//        System.out.println(Arrays.toString(strArr));
        
        String line = "1000+200-150";
        String[] strArr2 =line.split("\\-|\\+");//[\\-\\+=]
        System.out.println(Arrays.toString(strArr2));

replaceAll方法
提供了用于字符串替换的方法
String replaceAll(String regex,String replacement)
将字符串中匹配正则表达式regex字符串替换replacement
String str1 = "12312321fsdfs123";
        //将上述字符串中的数字替换成中文"数字"
        str1 = str1.replaceAll("\\d", "数字");
        System.out.println(str1);
        //数字数字数字数字数字数字数字数字fsdfs数字数字数字
Object
.在Java类结果中,Java.lang.Object类位于顶端
(一切类的父类)
Object a = 任意对象
如果定义一个Java是没用使用extend关键字声明其父类,则其父类默认为java.lang.Object类
Object类型的引用变量可以指向任意的对象
Object a = new String

重写toString()方法
Object类中重要的方法,用于返回对象值的字符串表示
原则建议重写该方法:格式大多数遵循"类的名字[域值]";

任何对象都有toString()方法
String如何重写toString()方法
String已经重写过toString()方法
将自身返回
public String toString(){
return this;
}

equals方法
ps:Object默认的equals方法的比较规则等同与==.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值