字符串String

java.lang.String类代表字符串

程序中所有的双引号字符串,都是String类的对象。

  (1)   字符串特点:

        字符串内容永不改变

        正是因为字符串不可改变,所以字符串是可以共享使用

        字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。

   (2)创建字符串的常见3+1种方式:

        三种构造方法:

            public String():创建空白字符串,不含任何内容。

            public String(char[] array):根据字符数组的内容,来创建对应的字符串。

           public  String(byte[] array):根据字节数组的内容,来创建对应的字符串。

            一种直接创建: String str = "Hello";

public class Demo03String {

    public static void main(String[] args) {

        //使用空参构造

        String str1 =new String();

        System.out.println("第一个字符串:" + str1);

        //使用字符数组创建字符串

        char[] charArray = {'A', 'B', 'C'};

        String str2 =new String(charArray);

        System.out.println("第二个字符串:"+ str2);

        //根据字节数组创建字符串

        byte[] byteArra = {97, 98, 99};

        String str3 =new String(byteArra);

        System.out.println("第三个字符串:"+ str3);

    }

}

(3)字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。

    对于基本类型来说,==是进行数值的比较。对于引用类型来说,==是进行地址值的比较

public class Demo03StringPool {

    public static void main(String[] args) {

        String str1 ="abc";

        String str2 ="abc";

        char[] charArray = {'a','b','c'};

        String str3 =new String(charArray);

        System.out.println(str1==str2);

        System.out.println(str1==str3);

        System.out.println(str3==str2);

    }

相应的内存图

(4)==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:

* public boolean equals(Object obj):参数可以是任何对象

        注意事项:

            1,任何对象都能用Object进行接收。

            2,equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样

            3,如果比较双方一个常量一个变量,推荐把常量字符串写在前边

* public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。

public class Demo03StringEquals {

    public static void main(String[] args) {

        String str1 ="Hello";

        String str2 ="Hello";

        char[] charArray = {'H', 'e', 'l', 'l', 'o'};

        String str3 =new String(charArray);

        System.out.println(str1.equals(str2));//true

        System.out.println(str2.equals(str3));//true

        System.out.println("====");

        String str4 =null;

        System.out.println("abc".equals(str4));//推荐:false

        System.out.println(str4.equals("abc"));//不推荐:报错,空指针异常NullPointerException

        System.out.println("====");

        String strA ="Java";

        String strB ="java";

        System.out.println(strA.equals(strB));//false,严格区分大小写

        System.out.println(strA.equalsIgnoreCase(strB));//true,忽略大小写

    }

}

(5)String中与获取相关的常用方法有:

            public int length():获取字符串当中含有的字符个数,拿到字符串长度。

            public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。

            public char charAt(int index):获取指定索引位置的单个字符(索引从0开始。

            public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。

public class Demo03StringGet {

    public static void main(String[] args) {

        //获取字符串的长度

        int length ="abcdefghijklmnopqrstuvwxyz".length();

        System.out.println("字符串的长度为:" + length);

        //拼接字符串

        String str1 ="Hello";

        String str2 ="World";

        String str3 = str1.concat(str2);

        System.out.println(str3);

        System.out.println("====");

        //获取索引位置的单个字符

        char ch ="Hello".charAt(1);

        System.out.println("在一号索引位置的字符是:" + ch);

        System.out.println("====");

        //查找参数字符串在本来字符串中出现的第一次索引位置

        String original ="HelloWorld";

        System.out.println(original.indexOf("llo"));

    }

}

(6)字符串的截取方法:

    public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。

    public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。

    备注:[begin, end)

        public class Demo03SubString {

            public static void main(String[] args) {

            String str1 ="HelloWorld";

            String str2 = str1.substring(5);

            System.out.println(str1);//HelloWorld

            System.out.println(str2);//World

            System.out.println("====");

            String str3 = str1.substring(4, 7);//oWo

            System.out.println(str3);    

            System.out.println("===");

        /**

        * 下边这种写法,字符串的内容依然没有改变,下边有两个字符串"Hello", "Java"

        * str当中国保存的是地址值

        * 本来地址值是Hello的0x666

        * 后来地址值变成了Java的0x999

        */

        String strA ="Hello";

        System.out.println(strA);//Hello

        strA ="Java";

        System.out.println(strA);//Java

    }

}

(7)String当中与转换相关的常用方法有:

        public char[] toCharArray():将当前字符串拆非为字符数组作为返回值。

        public byte[] getBytes():获得房前字符串底层的字节数组。

        public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符串替换为新的字符串,返回替换之后的结果新字符串。

        备注:CharSequence意思是可以接收字符串类型

    public class Demo03StringConvert {

    public static void main(String[] args) {

        //转换为字符数组

        char[] chars ="Hello".toCharArray();

        System.out.println(chars[0]);//H

        System.out.println(chars.length);//5

        System.out.println("====");

        //转换为字节数组

        byte[] bytes ="abc".getBytes();

        for (int i =0; i < bytes.length; i++) {

            System.out.println(bytes[i]);

        }

        System.out.println("====");

        //字符串的内容替换

        String str1 ="How do you do?";

        String str2 = str1.replace("o", "*");

        System.out.println(str1);//How do you do?

        System.out.println(str2);//H*w d* y*u d*?

    }

}

(8)分割字符串的方法:

public String[] split(String regex):按照参数的规则,将字符串切分为若干部分。

注意事项:split方法的参数其实是一个正则表达式,如果按照英文句点“.”进行切分,必须写“\\.”

public class Demo03StringSplit {

    public static void main(String[] args) {

        String str1 ="aaa,bbb,ccc";

        String[] array1 = str1.split(",");

        for (int i =0; i < array1.length; i++) {

            System.out.println(array1[i]);

        }

}

}

(9)

/**

* 题目:定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。格式按照如下:[word1#word2#word3]。

* 分析:

*  1,首先准备一个int[]数组,内容是1,2,3

*  2,定义一个方法,用来将数组变为字符串

*      返回值类型:String

*      方法名称:fromArrayToString

*      参数列表:int[]

*  3,格式:[word1#word2#word3]

*      用到:for循环、字符拼接、每个数组前边都有word滋养、分割使用的是#、区分一下是不是最后一个

*  4,调用方法,得到返回值,并打印结果字符串

*/

public class Demo03StringPractice {

    public static void main(String[] args) {

        int[] array = {1, 2, 3};

        String result =fromArrayToString(array);

        System.out.println(result);

    }

public static StringfromArrayToString(int[] array){

        String str ="[";

        for (int i =0; i < array.length; i++) {

            if (i == array.length -1){

                str +="word" + array[i] +"]";

            }else{

                str +="word" + array[i] +"#";

            }

}

return str;

    }

}




import java.util.Scanner;

/**

* 题目:键盘输入一个字符串,并且统计其中各种字符出现的次数。种类有:大写字母、小写字母、数字、其他

* 分析:

*  1,既然用到键盘输入,肯定是Scanner

*  2,键盘输入的是字符串,那么:String str = sc.next();

*  3,定义四个变量,分别代表四中字符各自的出现次数。

*  4,需要对字符串的一个字,一个字检查,String-->char[],方法就是toCharArray()

*  5,遍历char[]字符数组,对当前字符的种类进行判断,并且用四个变量进行++运算。

*  6,打印输出四个变量,分别代表四种字符出现次数。

*/

public class DemoStringCount {

    public static void main(String[] args) {

        Scanner sc =new Scanner(System.in);

        System.out.println("请输入一个字符串:");

        String input = sc.next();

        int countUpper =0;

        int countLower =0;

        int countNumber =0;

        int countOther =0;

        char[] charArray = input.toCharArray();

        for (int i =0; i < charArray.length; i++) {

            char ch = charArray[i];

            if('A' <= ch && ch <='Z'){

                countUpper++;

            }else if ('a' <= ch && ch <='z'){

                countLower++;

            }else if ('0' <= ch && ch <='9'){

                countNumber++;

            }else{

                countOther++;

            }

}

        System.out.println("大写字母有:"+countUpper);

        System.out.println("小写字母有:"+countLower);

        System.out.println("数字有:"+countNumber);

        System.out.println("其他有:"+countOther);

    }

}

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

推荐阅读更多精彩内容