java字符串处理

1、简单介绍

      java中有八中基本数据类型,分别为byte short int long四种整数类型,double float 两种小数类型,char类型,boolean类型以及String类型,其中String类型则是最为特别的类型。String类型是一个类,每一个字符串都是String类的一个对象,所以字符串的实例都是存在于堆内存中的。当创建一个String变量的时候,他们指向的都是堆内存中的一个String对象的地址。而对于基本的数据类型在被创建的时候则直接指向这个变量的值;

2、字符串的特点

        String类被final修饰,创建之后内容不能更改,当调用更改String对象的方法时都会创建一个新的String对象,将改变后的内容赋给新的对象,创建一个相同的String对象不会重新开辟新的空间,堆中内容可以重复使用

3、字符串的创建

3.1、字符串的创建有以下两种方式:

     1、字面量方式创建:方式一:String a = “aaa” ;

     2、对象方式创建:方式二:String b = new String(“aaa”);

3.2、两种创建方式对比

       两种方式都能创建字符串对象,但方式一要比方式二更优。 因为字符串是保存在常量池中的,而通过new创建的对象会存放在堆内存中。

一:字符串常量池中已经有字符串常量”aaa”

    •  通过方式一创建对象,程序运行时会在字符串常量池中查找”aaa”字符串,将找到的”aaa”字符串的地址赋给a。

    •  通过方式二创建对象,无论字符串常量池中有没有”aaa”字符串,程序都会在堆内存中开辟一片新空间存放新对象。

二:字符串常量池中没有字符串常量”aaa”

    •  通过方式一创建对象,程序运行时会将”aaa”字符串放进字符串常量池,再将其地址赋给a。

    •  通过方式二创建对象,程序会在堆内存中开辟一片新空间存放新对象,同时会将”aaa”字符串引用放入字符串常量池,相当于创建了两个对象。


字符串存储结构图

        当使用字面量创建字符串时,字符串会再常量池中创建对象,当使用对象类型中创建时会在堆中创建对象,如果在常量池中不存在新创建的对象,则常量池中也会创建一个string对象。

4、字符串常用方法

1 length()字符串的长度

   String a = "Hello Word!";

   System.out.println(a.length);

输出的结果是字符串长度10。

2 charAt()截取一个字符

  String a = "Hello Word";

  System.out.println(a.charAt(1));

输出的结果是字符串a的下标为1的字符e。

3 getchars()截取多个字符并由其他字符串接收

  String a = "Hello Word";

  char[] b =newchar[10];

  a.getChars(0, 5, b, 0);

  System.out.println(b);

输出的结果为Hello,其中第一个参数0是要截取的字符串的初始下标(int sourceStart),第二个参数5是要截取的字符串的结束后的下一个下标(int sourceEnd)也就是实际截取到的下标是int sourceEnd-1,第三个参数是接收的字符串(char target[]),最后一个参数是接收的字符串开始接收的位置。


4 getBytes()将字符串变成一个byte数组

String a = "Hello Word";

byteb[] = a.getBytes();

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

输出的结果为Hello Word的byte数组。


5 toCharArray()将字符串变成一个字符数组

String a = "Hello Word";

char[]b = a.toCharArray();

System.out.println(b); 

输出的结果为Hello Word字符数组。


6 equals()和equalsIgnoreCase()比较两个字符串是否相等,前者区分大小写,后者不区分

String a = "Hello Word";

String b = "hello word";

System.out.println(a.equals(b));

System.out.println(a.equalsIgnoreCase(b));

输出的结果为第一条为false,第二条为true。


7 startsWith()和endsWith()判断字符串是不是以特定的字符开头或结束

String a = "Hello Word";

System.out.println(a.startsWith("ee")); 

System.out.println(a.endsWith("rd"));

输出的结果第一条为false,第二条为true。


8 toUpperCase()和toLowerCase()将字符串转换为大写或小写

String a = "Hello Word";

System.out.println(a.toUpperCase());

System.out.println(a.toLowerCase());

输出的结果第一条为“HELLO WORD”,第二条为“hello word”。


9 concat() 连接两个字符串

String a = "Hello Word";

String b = "你好";

System.out.println(b.concat(a));

输出的结果为“你好Hello Word”。


10 trim()去掉起始和结束的空格

String a ="    Hello Word  ";

System.out.println(a.trim());

输出的结果为“Hello Word”。


11 substring()截取字符串

String a = "Hello Word";

System.out.println(a.substring(0, 5));

System.out.println(a.substring(6));

输出的结果第一条为“Hello”,第一个参数0(beginIndex)是开始截取的位置,第二个参数5(endIndex)是截取结束的位置,输出的结果第二条是“Word”,参数6(beginIndex)是开始截取的位置。


12 indexOf()和lastIndexOf()前者是查找字符或字符串第一次出现的地方,后者是查找字符或字符串最后一次出现的地方

String a = "Hello Word";

System.out.println(a.indexOf("o"));

System.out.println(a.lastIndexOf("o"));

输出的结果第一条是4,是o第一次出现的下标,第二条是7,是o最后一次出现的下标。


13 compareTo()和compareToIgnoreCase()按字典顺序比较两个字符串的大小,前者区分大小写,后者不区分

String a = "Hello Word";

String b = "hello word";

System.out.println(a.compareTo(b));

System.out.println(a.compareToIgnoreCase(b));

输出的结果第一条为-32,第二条为0,两个字符串在字典顺序中大小相同,返回0。


14 replace() 替换

String a = "Hello Word";

String b = "你好";

System.out.println(a.replace(a, b));

System.out.println(a.replace(a, "HELLO WORD"));

System.out.println(b.replace("你", "大家"));

输出的结果第一条为“你好”,第二条为“HELLO WORD”,第三条为“大家好”。

5、正则表达式简单介绍

1,方括号:方括号中指定的单个字符才参与匹配

public class Test {  

     public static void main(String[] args) {  

         System.out.println("a".matches("[abc]"));   //true  

         System.out.println("abc".matches("[abc]")); //false  

         System.out.println("a".matches("[a-c]"));   //true  

    }  

}

2,逻辑运算符


逻辑运算符

示例一:如果想要匹配多个字符,则不能使用[],而要使用()

public class Test {  

   public static void main(String[] args) {  

     System.out.println("aa".matches("(a|aa)")); //true  

     System.out.println("aa".matches("[a|aa]")); //false  

    }  

}  

示例二:&&一定要在[]内部使用,否则会被认为是匹配2个连续的&符号

public class Test {  

    public static void main(String[] args) {  

        System.out.println("a&&b".matches("a&&b")); //true  

        System.out.println("b".matches("[a-b&&b]"));    //true,等价于[b]  

        System.out.println("a".matches("[a-f&&[^bcdef]]")); //true,等价于[a]  

    }  

}  

示例三:^一定要在[]内部使用,否则将被认作起始边界符

public class Test {  

    public static void main(String[] args) {  

        System.out.println("c".matches("[^a]"));    //true  

        System.out.println("c".matches("^a"));  //false  

        System.out.println("c".matches("[^a-c]"));  //false  

    }  

}

3,表示匹配次数的符号


匹配次数

4,预定义字符


预定义字符

示例四:

public class Test {  

    public static void main(String[] args) { 

        System.out.println("a   b".matches("a.b")); //true  

        System.out.println("ab".matches("a.b"));    //false  

        System.out.println("aabb".matches("a.b"));  //false  

    }  

}  

5,边界字符


边界字符

6,java正则表达式使用对象

java.util.regex.Pattern:Pattern的实例对象是不可变对象,线程安全

java.util.regex.Matcher:Matcher的实例对象是非线程安全的

public class Test {  

   public static void main(String[] args) {  

        Pattern p = Pattern.compile("\\d*");  

        Matcher m = p.matcher("123"); 

        System.out.println(m.matches());  

    }  

}  

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

推荐阅读更多精彩内容

  • package cn.itcast_01;/* 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 ...
    蛋炒饭_By阅读 589评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,631评论 18 399
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,286评论 0 19
  • 这是一部电影、攒够了失望就离开~很多人都会觉得自己和电影中的女主角很像、所以攒够了失望就离开吧 爱你的人,生怕给你...
    月半月半石卒阅读 428评论 0 1
  • 茶叶经过不同的制作工艺有凉性及温性之分,所以体质各异饮茶也有讲究。 如果是热性体质,体内火气多,多喝绿茶可排火祛毒...
    浪盏闲茶阅读 572评论 0 0