String,正则表达式

String

equals() ==
重写后比较的是数据内容 引用类型比较地址,基本类型比较本身值

虚拟机的内存划分为栈、堆、方法区。
方法区内又为String开辟了一块字符串常量池。

String str = "测试";

先检查字符串常量池中有没有对应的字符串,有则直接调用,没有则创建。变量地址 str 指向 String 所在的字符串常量池。

String str = new String("测试");

先检查字符串常量池中有没有对应的字符串,有则直接调用,没则有则创建,并且在堆内存中开辟一块空间,将字符串常量池中的复制一份给堆内存,返回堆内存地址。

注意
public static void changed(String str) {
        if ("测试".equals(str)) {

        }
}
一般在开发中用常量调用equals()去比较,
因为用变量如果传入Null,会报NullPointerException。
StringBuffer

1.字符串是常量,它们的值在创建之后不能更改。

2..字符串的内容不适宜频繁修改,因为字符串的内容一旦发生变化,就会创建一个新的对象,若要频繁修改字符串的内容,建议使用字符串缓冲类。

StringBuffer 其实就是一个存储字符的容器,底层是依赖一个字符数组做存储,默认构造方法16个字符,如果不够使用,自动增长一倍。

StringBuffer 和 StringBuilder 的区别

StringBuffer 可以保证线程安全,但是相应速度慢,而StringBuilder则相反。
实际开发中一般用StringBuilder,因为很少在线程中频繁操作字符串。


正则

正则表达式就是操作字符串的一个规则。

预定义字符

任何预定义字符,在没有加上数量之前都只能匹配一个字符。

预定义字符 作用
. 任何字符
\d 数字:[0-9]
\D 非数字字符(除了0-9):[^0-9]
\s 空白字符:[\t\n\x08\f\r]
\s 空白字符:[\t\n\x08\f\r]
\S 非空白字符:[^\s]
\w 单词字符[a-zA-Z_0-9]
\W 非单词字符[^\w]
    public static void main(String[] args) {

        /**
         * 预定义字符
         */
        System.out.println("任意字符:" + ("%".matches(".")));

        System.out.println("数字字符:" + ("12".matches("\\d\\d")));

        System.out.println("非数字字符:" + ("a".matches("\\D")));

        System.out.println("空白字符:" + ("\r".matches("\\s")));

        System.out.println("非空白字符:" + ("a".matches("\\S")));

        System.out.println("单词字符:" + ("a".matches("\\w")));

        System.out.println("非单词字符:" + (".".matches("\\W")));
    }
数量词
数量词 作用
? 一次或一次也没有
* 零次或多次
+ 一次或多次
{n} 恰好n次
{n,} 至少n次
{n,m} 至少n次,但是不超过m次
        public static void main(String[] args) {

        /**
         * 数量词
         */
        System.out.println("?一次或一次也没有:" + ("1".matches("\\d?")));

        System.out.println("*零次或多次:" + ("11".matches("\\d*")));

        System.out.println("+至少出现一次:" + ("11".matches("\\d+")));

        // 只能出现十一位
        System.out.println("{次数}恰好出现n次:" + ("11".matches("\\d{11}")));
        // 至少要出现三次,没有上限
        System.out.println("{次数,}至少要出现指定的次数:" + ("111".matches("\\d{3,}")));
        // 指定出现次数为3-4次
        System.out.println("{次数1,次数2指定次数出现的范围}" + "11144".matches("\\d{3,4}"));
    }
字符类(范围词)

范围词里面不管内容有多长,没有数量词的配合都只能匹配一个字符而已

范围词 作用
[abc] 只包含a,b,c
[^abc] 任何字符,除了a、b或c
[a-zA-Z] a到z或A到Z,两头的字母包括在内
[a-d[m-p]] a到d或m到p
[a-z&&[def]] d、e或f(交集)
public static void main(String[] args) {

        /**
         * 范围词
         */

        System.out.println("[abc]:" + "abc".matches("[abc]{3}"));
        
        //除了abc以外
        System.out.println("[abc]:" + "@ss".matches("[^abc]{3}"));
        //字符可以出现a-z,A-Z,$#
        System.out.println("[abc]:" + "ass".matches("[a-zA-Z$#]{3}"));

    }
匹配,分割
public class Run {
    public static void main(String[] args) {

        matchesPhone("13390580000");
        mathcesTel("020-12345678");
        spiltTest1();
        spiltTest2();

    }

    // 匹配手机号,第一位 1开头,第二位3,5,4,7,8,共11位
    public static void matchesPhone(String phone) {
        String reg = "1[34578]\\d{9}";
        System.out.println(phone.matches(reg) ? "合法" : "非法");
    }

    // 匹配固定号码,区号-主机号 区号:首位0,长度3-4位 主机号:首位不能为0,长度7-8
    public static void mathcesTel(String tel) {
        String tell = "0\\d{2,3}-[1-9]\\d{6,7}";
        System.out.println(tel.matches(tell) ? "合法" : "非法");
    }

    // 切割空格
    public static void spiltTest1() {
        String str = "测      试         切    割";
        String[] arr = str.split(" +");
        System.out.println(Arrays.toString(arr));

    }
    
    //根据重叠词切割
    public static void spiltTest2(){
        String str = "红火火火白恍恍恍蓝忽忽";
        //如果正则的内容需要被复用,那么需要对正则的内容进行分组,分组的目的就是为了提高正则的复用性
        //组号不能指定,组号是从1开始,\\1代表引用第一组锁匹配的内容
        String[] arr = str.split("(.)\\1+");
        System.out.println(Arrays.toString(arr));
        
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容