2021-05-27String

 Java中基 *本数据类型:四类八种,都会对应一个引用类型(JDK5以后新特性:自动拆装箱)
     基本类型          对应的引用类型
 *      byte                 Byte
 *      short                Short
 *      int                  Integer
 *      long                 Long
 *      float                Float
 *      double               Double
 *      char                 Character
 *      boolean              Boolean
 *
 *    基本类型 内存中---引用类型:好处就是可以String类型之间进行转换!
 *
 *
 *    Character:包含了一个char的值
 *    构造方法
 *      public Character(char value) :创建Character类对象,参数为char类
 *
 *      提供 了一些判断功能
 *              public static boolean isDigit(char ch):判断这个ch字符是否为数字
 *              public static boolean isLowerCase(char ch):判断这个ch字符是否为小写字母字符
 *           :  public static boolean isUpperCase(char ch):判断这个ch字符是否为大写字母字符

  Integer类的静态的功能


 *              public static String toBinaryString(int i):将十进制转换成二进制(以字符串形式体现)
 *              public static String toOctalString(int i):转换八进制(返回String)
 *              public static String toHexString(int i):转换成十六进制(返回String)

 Integer类:
 *                 成员变量:
 *                  public static final int MIN_VALUE:包装了int类型的最小值
 *                  public static final int MAX_VALUE:包装了int类型的最大值

构造方法
 *  public Integer(int value):将int类型的数据包装为Integer类型
 *  public Integer(String s) throws NumberFormatException :将字符串值包装为Integer类型
 *      

 此s参数必须为数字字符串,否则程序出现 NumberFormatException(数字格式化异常)

 int num = 200; //声明这个变量int
        Integer i = new Integer(num); //创建一个Integer类对象:将int---->装箱为Integer了
        //public int intValue()
        //public static Integer valueOf(int i)
        i = Integer.valueOf(i.intValue() + 100);  // i = Ineger.valueOf(先将Integer拆箱为int) ---->在装箱为Integer类型
        System.out.println(i);

 Jdk5以后新特性:
 *          静态导入,自动拆装箱,增强for循环,可变参数,枚举...
 *
 *       自动拆装箱:
 *              装箱:  基本数据类型 会自动的包装为对应的引用类型
 *              拆箱:  引用类型会自动的转换为基本数据类型

Integer类中存在一个:内部缓存区 IntegerCache(Integer的成员内部类):  范围:-128~127
 *
 * 直接赋值:----考虑到值的是否在范围内
 *
 * Integer xx = 值 ;---->底层执行的valueOf(int )
 *
 *   public static Integer valueOf(int i) {
 *         if (i >= IntegerCache.low && i <= IntegerCache.high){
 *             return IntegerCache.cache[i + (-IntegerCache.low)]; //127 + 128
 *         }else{
 *              return new Integer(i);   //new  Integer(128) ;
 *         }
 *
 *
 *     }
 *
 *     如果不在内部缓存区 的范围内(-128~`27):会重新开辟空间new Integer
 *     如果在内部缓存区中:直接从缓冲区(Integer的静态的成员内部类) :直接从缓存区中取值!

public class IntegerTest {
    public static void main(String[] args) {

        Integer i1 = 127 ;
       // Integer i2 = new Integer(127) ;
        Integer i2 = 126 ;
        System.out.println(i1 == i2);
        System.out.println(i1.equals(i2));
        System.out.println("-------------------------");

        Integer i3 = new Integer(127) ;
        Integer i4 = new Integer(127) ;
        System.out.println(i3==i4);
        System.out.println(i3.equals(i4));

        System.out.println("--------------------------");
        Integer i5 = 128 ;
        Integer i6 = 128 ;
        System.out.println(i5 == i6);//false
        System.out.println(i5.equals(i6));
        System.out.println("--------------------------");
        Integer i7 = 129 ;
        Integer i8 = new Integer(129) ;
        System.out.println(i7==i8);
        System.out.println(i7.equals(i8));

 ==和equals的区别
 *  ==:连接的引用类型变量:比较的是地址值是否一样
 *  equals:默认比较的是两个对象的地址值是否相同,只要他重写了Object的equals方法,比较的是对象中的内容是否相同
 *          String类本身重写了equals方法
 *
 * 将常量赋值给String变量以及new String("常量")区别
 *      前者是在常量池中去寻找是否存在这个常量,有就返回它常量池中的这个常量地址;否则,就在常量池中开辟空间!
 *      后者:是在堆内存中开辟空间,同时字符串常量标记,需要在常量池中寻找这个常量

 字符串变量相加:先开空间,不会直接先拼接;
 *      而字符串常量相加,直接先相相加,然后看结果是否在常量池中有,如果存在,直接返回当前这个地址;否则开辟的新的空间
 *
 *      

public class StringDemo2 {

    public static void main(String[] args) {
        String s1 = "hello" ;
        String s2 = "world" ;
        String s3 = "helloworld" ;
        System.out.println((s1+s2)==s3)
        System.out.println((s1+s2).equals(s3));
        System.out.println("-----------------------------");
        System.out.println(("hello"+"world")==s3);
        System.out.println(("helloworld").equals(s3));
    }
}

运行结果:

false
true
-----------------------------
true
true

反编译工具

可以使用反编译工具查看当前字节码文件----如何进行优化的!

String s = "hello";
        String s1 = "world";
        String s2 = "helloworld";
        System.out.println((new StringBuilder()).append(s).append(s1).toString() == s2);
        System.out.println((new StringBuilder()).append(s).append(s1).toString().equals(s2));
        System.out.println("-----------------------------");
        System.out.println("helloworld" == s2);
        System.out.println("helloworld".equals(s2));

    }

字符串的判断功能
 *      public boolean equals(Object anObject):
 *          判断当前字符串和此传递进来的字符串进行对比:内容是否相同
 *      public boolean equalsIgnoreCase(String anotherString):不区分大小写,对比的字符串内容
 *      public boolean contains(CharSequence s):判断是否包含指定的字符值
 *      public boolean isEmpty():判断字符串 是否为空内容
 *      boolean startsWith(String prefix)  :判断以指定的字符串开头
 *      boolean endsWith(String suffix):判断以指定的字符串结尾

public class StringDemo {
    public static void main(String[] args) {
        //创建一个字符串
        String s = "helloJavaEE" ;
        //public boolean equals(Object anObject): 区分大小写的(如果为字符串类型)
        System.out.println("equals():"+s.equals("HELLOJavaEE"));
        System.out.println("equals():"+s.equals("helloJavaEE"));
        System.out.println("------------------------------------");
//        public boolean equalsIgnoreCase(String anotherString):不区分大小写,对比的字符串内容
        System.out.println("equalsIgnoreCase():"+s.equalsIgnoreCase("HELLOJavaEE"));
        System.out.println("------------------------------------");
//        public boolean contains(String s):判断是否包含指定的子字符串
        System.out.println("contains():"+s.contains("hello"));
        System.out.println("contains():"+s.contains("ak47"));
        System.out.println("------------------------------------");
//        public boolean isEmpty():判断字符串 是否为空内容
        //不是空内容就是flase,为空内容,就是true
      /*  s = "" ;//空字符串: 空字符序列
        System.out.println(s.isEmpty());
        s = null ; //空对象
      //  System.out.println(s.isEmpty());
        if(s!=null){
            System.out.println(s.isEmpty());
        }else{
            System.out.println("对不起,没有字符串对象存在");
        }*/
        System.out.println("--------------------------------");
        System.out.println(s.startsWith("hel"));
        System.out.println(s.endsWith("ee"));

    }
}

  String的应用
 *          键盘录入字符串,遍历字符串:就是将字符串中每一个字符一一获取!

public class StringDemo3 {
    public static void main(String[] args) {

          /*  Scanner sc = new Scanner(System.in) ;
        System.out.println("请你输入一个字符串:");
        String line = sc.nextLine() ;*/


        String s = "helloworld" ;
        //原始的做法:charAt(索引值)
        System.out.println(s.charAt(0));
        System.out.println(s.charAt(1));

        System.out.println(s.charAt(2));
        System.out.println(s.charAt(3));
        System.out.println(s.charAt(4));
        System.out.println(s.charAt(5));
        System.out.println(s.charAt(6));
        System.out.println(s.charAt(7));
        System.out.println(s.charAt(8));
        System.out.println(s.charAt(9));
        System.out.println("-------------------------");

        //charAt(int ch)+length()
        //直接使用String类的获取功能
        for(int x = 0 ; x < s.length() ; x ++){
                char ch = s.charAt(x) ;
            System.out.print(ch+"\t");
        }
        System.out.println();
        System.out.println("-------------------------");

        //使用转换功能去完成:
        //char[] toCharArray()
        char[] charArray = s.toCharArray();
        for (int i = 0; i <charArray.length ; i++) {
            //每一个字符获取到了
            char ch = charArray[i] ;
            System.out.print(ch+"\t");
        }
        System.out.println();


    }
}

 String类的转换功能

 


 *      public char[] toCharArray():将指定的支持转换成新的字符数组
 *      public byte[] getBytes():编码,将指定的字符串以平台默认编码集进行编码(String---byte[])
 *      public String toLowerCase():将当前字符串转换成小写
 *      public String toUpperCase():将当前字符串转换成大写
 *      static String valueOf(int i/boolean/double/float/Object):将部分的基本数据和Object引用类型转换成String

String类的截取功能


 *   public String substring(int beginIndex) :从指定的位置开始进行截取,默认截取到末尾为止
 *   public String substring(int beginIndex,int endIndex)
 *          获取一个新的字符串,从指定位置开始,到指定位置结束(包前不包后)(endIndex-)

vString类的 其他功能
 *


 *  替换功能
 *          public String replaceAll(String regex,
 *                          String replacement):替换所有:参数1为:匹配的正则表达式的子字符串
 *                                                      参数2:要替换的内容
 *                                                      邮箱: 数字或者字母@数字或者字母.com
 *           public String replace(char oldChar,
 *                       char newChar):将oldChar使用newChar进行替换
 *
 *           public String replace(String target,
 *                       String replacement)      :将指定target子串使用指定  replacement子串进行替换
 *
 *
 *  去重两端空格
 *          public String trim():应用场景:
 *                      在IO中传输一些字符串数据的时候,防止前部和尾部存在空格字符,导致io异常,将字符串先去除两端空格
 *                            "hello"
 *                            " hello                "
 *


 *  按照字典顺序比较
 *  public int compareTo(String anotherString)

 

先读取出字符串的第一个“字母”进行比较,比较的方法是ascii码表的值(字符所对应的十进制值),如果前面的大那么返回1,后面的大返回-1;此位置相同,继续比较下一位,直到最后一位,如果都相同的话,就返回0;

Java中的compareTo()函数用法比较另一个函数字符:public int compareTo(String anotherString)

按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。

如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只有在方法 equals(Object) 返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引对二者均为有效索引,要么它们的长度不同,或者同时具备上述两种情况。

如果它们在一个或多个索引位置上具有不同的字符,假设 k 是这类索引的最小值;则按照 < 运算符确定的那个字符串在位置 k 上具有较小的值,其字典顺序在其他字符串之前。

这种情况下,compareTo 返回这两个字符串在位置 k 处的两个不同的 char 值,即值:
this.charAt(k)-anotherString.charAt(k)
如果它们没有不同的索引位置,则较短字符串在字典顺序上位于较长字符串的前面。这种情况下,compareTo 返回这两个字符串长度的不同,即值:
this.length()-anotherString.length()
指定者: 接口 Comparable 中的 compareTo
参数: anotherString - 要比较的 String。

返回: 如果参数字符串等于此字符串,则返回 0 值;如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;如果按字典顺序此字符串大于字符串参数,则返回一个大于 0 的值。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值