String字符串的的案例01

1: 案例: 演示String创建字符串后的 特点.
需求:
1.定义字符数组chs, 初始化值为: 'a, ‘b’, ‘c’, 这三个字符 .
2.将其分别封装成s1, s2这两个字符串对象.
3.通过判断s1和s2这两个字符串对象是否相同.
4.直接通过""的方式创建两个字符串对象s3和s4.
5.通过
判断s3和s4这两个字符串对象是否相同.

结论记忆:
	1:通过new出来的方式创建的字符串对象,每次都会在堆内存中开辟新的空间.
	2:字符串值是一个常量, 如果是通过免 new 的方式之间创建对象, 则会储存在方法区 的 常量池中
public class TestDemo01 {
    public static void main(String[] args) {
        //1.定义一个字符数组, 初始值为: 'a' , 'b', 'c', 这个三个字符
        char[] ch = { 'a' , 'b', 'c'};
        //2.将其分别封装成s1, s2这两个字符换对象
        String s1 = new String(ch);
        String s2 = new String(ch);
        //3. 通过 == 来比较
        System.out.println(s1 == s2);   //false  比较的是地址值

        //4. 之间创建 " "的方发生来计较

        String s3= "abc";
        String s4 = "abc";
        System.out.println(s3==s4); // true 比较的地址值

    }
}

2: Java中的常量优化机制

  Java中有常量优化机制:
        针对于byte类型:
            如果是变量相加: 会自动提升类型, 然后在计算结果, 提升顺序为:  byte, short, char -> int -> long -> float -> double
            如果是常量相加: 会直接运算, 然后看结果在不在左边的数据类型范围内, 在不报错,不在, 就报错.
			
        **针对于String类型:
             如果是变量拼接:  会在堆区开辟新空间.
             如果是常量拼接:  不会在堆区开辟新空间, 而是在 常量池中做操作的.
        上述的相同点是, 如果既有变量参与, 又有常量参与, 则按照 变量 的规则走.**
public class Demo03 {
    public static void main(String[] args) {
        byte b1 = 3;
        byte b2 = 4;
        byte b3 = 3 + 124;
        //byte b4 = b1 + b2;      //报错, 因为类型提升了.
        //byte b5 = b1 + 4;         //如果既有变量参与, 又有常量参与, 则按照 变量 的规则走.
        System.out.println("---------------------------");

        String s1 = "abc";
        String s2 = "ab";
        String s3 = "c";
        //System.out.println(s1 == new StringBuilder().append(s2).append(s3).toString());
        System.out.println(s1 == s2 + s3);      //false
        System.out.println(s1 == s2 + "c");     //false
        System.out.println(s1 == "ab" + "c");   //true
    }
}

3: 案例: 演示字符串的比较.


    涉及到的String类中的成员方法:
        public boolean equals(Object obj)           比较两个字符串值是否相同, 比较的是: 内容, 区分大小写.
        public boolean equalsIgnoreCase(String s);  比较两个字符串值是否相同, 比较的是: 内容, 不区分大小写.

public class Demo01 {
    public static void main(String[] args) {
        //1.定义字符数组chs, 初始化值为: 'a, 'b', 'c', 这三个字符 .
        char[] chs = {'a', 'b', 'c'};
        //2.将其分别封装成s1, s2这两个字符串对象.
        String s1 = new String(chs);
        String s2 = new String(chs);
        //3.直接通过""的方式创建两个字符串对象s3和s4.
        String s3 = "abc";
        String s4 = "abc";

        //4.通过==分别判断s1和s2, s1和s3, s3和s4是否相同.
        System.out.println(s1 == s2);   //false
        System.out.println(s1 == s3);   //false
        System.out.println(s3 == s4);   //true
        System.out.println("--------------------");

        //5.通过equals()分别判断s1和s2, s1和s3, s3和s4是否相同.
        System.out.println(s1.equals(s2));  //true
        System.out.println(s1.equals(s3));  //true
        System.out.println(s3.equals(s4));  //true
        System.out.println("--------------------");

        //6.通过equalsIgnoreCase()判断字符串abc和ABC是否相同.
        System.out.println("abc".equals("ABC"));            //false, 区分大小写
        System.out.println("abc".equalsIgnoreCase("ABC"));  //true
        System.out.println("abc".equalsIgnoreCase("bcd"));  //false
    }
}

4:案例: 遍历字符串.

  需求:
*         键盘录入一个字符串, 使用程序实现在控制台遍历打印该字符串.
*
*    涉及到的String类中的成员方法:
*         public char charAt(int index);      根据索引, 去字符串中找该索引对应的字符, 索引是从0开始的.
*         public int length();                获取集合中元素的长度,: 字符串中字符的总个数.
*         public char[] toCharArray();        把字符串元素转成其对应的 字符数组.

public class TestDemo03 {
 public static void main(String[] args) {
     //1. 创建一个键盘录入对象 提示用户键盘录入
     Scanner sc = new Scanner(System.in);
     //2.接收用户键盘录入字符串
     System.out.println("请录入一个字符串:");
     String s = sc.nextLine();

     //方法1: 合并版
     //3.  for循环  遍历字符串  itar  遍历字符数组
/*     for (int i = 0; i < s.length(); i++) {
         char ch = s.charAt(i);
         System.out.println("每个字符是:" + ch);
     }
*/
     //方法2: 把字符串转成一个新的字符数组
     char[] chars = s.toCharArray();
     //然后遍历数组   itar  快速遍历数组
     for (int i = 0; i < chars.length; i++) {
         char aChar = chars[i];
         System.out.println("每一个字符是:" + aChar);
     }

 }
}

案例: 统计字符串中每类字符的个数, 并打印.

/*
 *     需求:
 *         键盘录入一个字符串, 统计该字符串中大写字母字符, 小写字母字符, 数字字符出现的次数.
 *         注意: 不考虑其他字符, 例如@, !, \, /等           
 *
 *     思路:
 *         1. 定义三个计数器, 分别用来记录: 小写字母字符, 大写字母字符, 以及数字字符出现的次数.
 *         2. 提示用户录入要用来统计的字符串, 并接收.
 *         3. 遍历字符串, 获取到每一个字符.
 *             方式1:  length() + charAt()方法结合.
 *             方式2:  toCharArray(), 直接把字符串 -> char[]
 *         4. 判断当前字符属于哪种字符, 是哪种, 对应的计数器就+1
 *         5. 循环结束后, 计数器记录的就是我们想要的结果, 直接打印即可.
 */
public class TestDemo04 {
    public static void main(String[] args) {
        //1.定义计数器 来统计出现的次数
        int lowerCaseLetters = 0;
        int uppercaseLetter = 0;
        int digital = 0;
        //2.Scanner  实现键盘录入且接收
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入字符内容:");
        String s = sc.nextLine();

        // 3. 遍历字符串, 获取到每一个字符.
        //方式1:  length() + charAt()方法结合.
        /*for (int i = 0; i < str.length(); i++) {
            //ch 就是字符串中的每一个字符.
            char ch = str.charAt(i);
        }*/


        // 方式2:  toCharArray(), 直接把字符串 -> char[]
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char aChar = chars[i];
            //判断属于哪一种
            if (aChar >= 'a' && aChar <= 'z'){
                lowerCaseLetters++;;
            }else if (aChar >= '0' && aChar <= '9'){
                digital++;
            } else if (aChar >= 'A' && aChar <= 'Z') {
                uppercaseLetter++;
            }
        }

        //循环结束后  输出统计的次数
        System.out.println("小写字母出现的次数:" + lowerCaseLetters);
        System.out.println("大写字母出现的次数:" + uppercaseLetter);
        System.out.println("数字出现的次数:" + digital);

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值