p133 字符串 由浅到深

字符串比较原理:String是引用类型

字符串:内容比较用equals,地址比较用==

package day7.demo1;
/*p133-142 
*String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
* 翻译过来:程序中所以的双引号字符串,都是String类的对象(就算没有new)
* 字符串的特点:
* 1.字符串的内容永不改变
* 2.正因为字符串的内容是不可用改变的,所以字符串是可以共享使用的
* 3.字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组
* 创建字符串的3+1中方式:
* 三种构造方法:
* 1. public String():创建一个空白字符串,不含任何内容
* 2.public String(char[] array):根据字符数组的内容,来创建对应的字符串
* 3.public String(byte [] array):根据字节数组的内容,来创建对应的字符串
* 直接常见
* String s4="nihoa"; //直接写上“”都是字符串的对象
* */

import com.sun.org.apache.xpath.internal.objects.XString;

import java.util.Scanner;

public class DemoString {

    public static void main(String[] args) {
 //==========================创建方式=========================
        //方法1:
       String s1= new String();
       System.out.println("第一个字符"+s1);
       //方法2:
        char [] s2char=new char[]{'A','B','C'};
        String s2= new String(s2char);
        System.out.println("第二个字符"+s2);

        //方法三:
        byte [] bys3=new byte[] {97,98,99};
        String s3=new String(bys3);
        System.out.println("第三个字符"+s3);

        //直接创建字符串:
        /*程序中直接写上双引号的字符串,就在字符串常量池中
        * 对于基本类型来说,==进行的是数值的比较
        * 对于引用类型来说,==是进行地址值的比较
        *
        *
        * */
        String s4="abc";
        String s5="abc";
        char [] schar=new char[]{'a','b','c'};
        String s6=new String (schar);
        System.out.println(s4==s5);
        System.out.println(s5==s6);
        System.out.println(s4==s6);

//==========================常用方法=========================
        /*==是进行地址的比较,如需比较内容,使用
        public boolean equals(object obj)
        注意:任何对象都能用object接收
        equals方法具有对策行a.equals(b)和b.equals(a)一样
        如果比较是一个常量一个变量,建议写法: 常量.equals(变量); “abc”.equals(str) 不推介ste.equals("abc");
        *public boolean equalsIgnoreCase(String str):忽略大小写,进行比较
        *
        * */
        String st1="Hello";
        String st2="Hello";
        char[] stchar3 = new char[] {'H','e','l','l','o'};
        String st3=new String(stchar3);
          System.out.println("equals比较的是是内容,==比较的是地址值 "+st1.equals(st2));//true
          System.out.println("equals比较的是是内容,==比较的是地址值 "+st1.equals(st3));//true
         System.out.println("equals比较的是是内容,==比较的是地址值 "+st1.equals("Hello"));//true
         System.out.println("Hello".equals("Hello"));//true

        //=====eauals注意事项=========
        String st5="abc";
        System.out.println("abc".equals("st5"));//true
        System.out.println(st5.equals("abc"));//true
//        String st6=null;
//        System.out.println("abc".equals("st6"));//false,推介把常量写在前面
//        System.out.println(st6.equals("abc"));//不推介,报错:空指针异常:NullPointerException,null对象是点不出方法的。
        //====equalsIgnoreCase注意事项:只是忽略英文的大小写=========
        String maxs="ABC";
        String mins="abc";
        System.out.println(maxs.equals("mins"));//true
         /*常用方法:
         public int length():获取字符串当中含有的字符个数,拿到字符串的长度
         public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串
         public char charAt(int index):获取指定索引位置的单个字符;
         public int indexOf(String str):查找参数字符串在本字符串当中首次出现的所以位置,如没有返回-1值
         public String substring(int index):截取从参数位置一直到字符串的末尾,获取新的字符串
         public String substring(int begin,int end):截取从begin开始到end 之间的字符串,[begin,end)
         public char[] toCharArray();将当前字符串拆分为字符数组作为返回值
         public byte[] getBytes();获取当前字符串的底层的字节数组
         public String replace (CharSequence oldString ,CharSequence newString);将所以出现的老字符串替换成为新的字符串,返回替换后的结果新字符串
         CharSequence:意思是说可以接收字符串类型
         public String[] split(String regex):按照参数的规则,将字符串切成为若干部分,regex是一个正则表达式
        * */
        int length="dddddd".length();
        System.out.println("字符串的长度是"+length);
        //字符串拼接:
        String str1="HelloHello";
        String str2="world";
        String str3=str1.concat(str2);//HelloHelloworld
        System.out.println("拼接后新的字符串是"+str3);
        //单个字符获取
        System.out.println("下标未0的字符是"+str1.charAt(0));//H
        //查找字符串首次出现位置
        System.out.println("llo首次出现的位置是"+str1.indexOf("llo"));//2
       //截取到最后
        System.out.println("从2开始截取到最后的字符串"+str1.substring(2));//lloHello
        //截取范围
        System.out.println("从2开始截到5"+str1.substring(2,5));//llo
        //拆分为字符数组
        String str5="hello,李宁";
        char [] charst5=str5.toCharArray();
        for (int i = 0; i < charst5.length; i++) {
            System.out.println("字符数组第"+i+"个字符是"+charst5[i]);
        }
       //字符串变为 获取byte数组
        byte [] bytestr5=str5.getBytes();
        for (int i = 0; i < bytestr5.length; i++) {
            System.out.println("byte数组第"+i+"个字符是"+bytestr5[i]);
        }
        //替换方法
       System.out.println("替换后的字符串:"+ str5.replace("李宁","乔丹"));
        //分割字符串
        String[] split = str5.split(",");
        for (int i = 0; i < split.length; i++) {
            System.out.println("split分割后的字符串数组第"+i+"个元素"+split[i]);
        }

        String str6="aaa.bbb.ccc.ddd";
        String[] split1 = str6.split("\\.");//.在正则表达式中又特俗的含义
        for (int i = 0; i < split1.length; i++) {
            System.out.println("split1分割后的字符串数组第"+i+"个元素"+split1[i]);
        }

//=================深入理解字符串是不变的==============
        // abc 地址值 ox66      def地址值 0x99   str本来的地址是0x66 变成了0x99 不是字符串变量,不是stra的字符变量,是里边保存的地址值变了;

        String stra="abc";
        System.out.println(stra);//abc
        stra="def";
        System.out.println(stra);//def

//=================字符串练习题:获取用户输入的字符串,判断字符串中的大写字母,小写字母,数字,和其他的字符数量=============
     Scanner sc=new Scanner(System.in);
     System.out.println("请输入字符串:");
      String getscanner=sc.next();
      getCharCount(getscanner);

    }
    /*方法定义的三要素:
    方法的返回值:统计数量,无返回类型
    方法的名称:getCharCount
    方法的参数:用户输入的字符串
    */
     public static void getCharCount(String str){
          char [] strchar=str.toCharArray();
          int upperCount=0;
          int lowerCount = 0;
          int numCount=0;
          int otherCount=0;
          //循环判断
        for (int i = 0; i < strchar.length; i++) {
          if('a'<=strchar[i]&&strchar[i]<='z'){
           lowerCount++;
          }else if('A'<=strchar[i]&&strchar[i]<='Z'){
           upperCount++;
          }else if('0'<=strchar[i]&&strchar[i]<='9'){
           numCount++;
          }else{
           otherCount++;
          }
        }
        System.out.println("输入的大写字母个数数:"+upperCount);
      System.out.println("输入的小写字母个数数:"+lowerCount);
      System.out.println("输入的数字个数数:"+numCount);
      System.out.println("输入的其他字符:"+otherCount);
     }
}

 

posted @ 2021-05-27 14:02  程序杨%  阅读(79)  评论(0)    收藏  举报