黑马程序员_字符串、字符串缓冲区和基本类型包装类

来源:互联网 发布:pc蛋蛋大小算法 编辑:程序博客网 时间:2024/05/16 05:39

----------------------       android培训java培训期待与您交流!     ----------------------

 

1String(概述)

      1、字符串是一个特殊的对象。字符串是一个常量,一旦初始化就不可以被改变

            例如:String s1 =“abc”;  s1是一个类类型变量,“abc”是一个对象。

      2、创建字符串:

            1:使用String类的构造方法。

                如:String s = new String(“abc”);

            2:用已创建的字符串创建另一个字符串。

                如:String s = new String(“abc”);  String tom = new String(s);

            3String(chara[])用一个字符数组a创建一个字符串对象。

                 如:char a[] = {‘a’,’b’,’c’};  String s = new String(a);

            4String(chara[], int startIndex, int count)提取字符串数组a中的一部分字符创建一个字符串对象,参数startIndexcount分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数。

                  如:char a[] = {‘s’,’t’,’b’,’u’,’s’,’n’};  String s = new String(a,2,3); s的字符串是”bus”

      3、判断地址值问题:

            1:用new关键字:JVM会马上在堆中开辟新的空间,所以地址值一定不同。

            2:赋值形式:JVM会默认的把新生成的String对象放到缓冲区(String池:在JVM的工作过程中,会创建一片的内存空间专门存入String对象,这片内存空间叫做String池。)中,然后每次判断String池中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向最初建立是该字符值对象的地址。否则创建新的String对象,放到String池里面。

      4在字符串中:==判断地址   .equals() 判断内容是否相同

           以前equals都是判断地址值,为何在字符串这儿判断内容了呢?

            因为String类覆写了Object类中equals方法,该方法用于判断内容是否相同。

      5String s1 = “abc”;String s2 = new String(“abc”);有什么区别?

            s1在内存中有一个对象。s2在内存中有两个对象。

2String(常见功能-获取、判断、转换、替换、切割、比较和去除空格)

      方法区中有方法区,静态区,常量池(字符串就存放这儿)。

      1、获取

           1:获取字符串的长度,即:字符串中包含的字符数。注:数组的长度是属性:.length

                  int length()

           2:根据位置获取位置上某个字符。

                  char charAt(int index)

           3:根据字符获取该字符在字符串中的位置。

                注:int ch是字符的ASCII码形式。没有检索到返回-1

                          int indexOf(int ch):返回字符ch在字符串中第一次出现的位置。

                          int indexOf(int ch, int fromIndex):返回字符ch在字符串中第一次出现的位置,从指定位置开始。

                          int indexOf(String str):返回字符串str在字符串中第一次出现的位置。

                          int indexOf(String str, int fromIndex):返回字符串str在字符串中第一次出现的位置,从指定位置开始。

                          int lastIndexOf(int ch):返回字符ch在字符串中最后一次出现的位置。

                注:其他三个的last方法同理。

      2、判断

           1:字符串中是否包含某一个子串。

                  boolean contains(str);

                 特殊之处:indexOf(str)如果返回-1,表示该str不在字符串中存在。所以,也可以用于对指定字符串判断是否包含。既可以判断包含,也可以获取位置。

          2:字符串中是否有内容。

                 boolean isEmpty():当且仅当length()0时返回true

           3:字符串是否是以指定内容开头。

                 boolean startsWith(Stringprefix);

          4:字符串是否是以指定内容结尾。

                 boolean endsWith(String prefix)

          5:判断字符串内容是否相同。覆写了Object类中的equals方法。

                 boolean equals(str);

          6:判断内容是否相同,并忽略大小写。

                boolean equalsIgnoreCase(str);

     3、转换

          1:将字符数组转成字符串。

                构造函数:String(char[])

                                     String(char[], offset,count):将字符数组中的一部分转成字符串。

                静态方法:staticString copyValueOf(char[]);

                                     static String copyValueOf(char[],offset, count):同理一部分。

                                     static StringvalueOf(char[]):同理

          2:将字符串转成字符数组。**

                 char[] toCharArray();

          3:将字节数组转成字符串。

                构造函数:String(byte[])

                                     String(byte[], offset,count):将字节数组中的一部分转成字符串。

          4:将字符串转成字节数组。**

                  byte[] getBytes();

           5:将基本数据类型转成字符串。

                  static String valueOf(int i);当然,括号里还可以换很多种。

                示例:3+””; //String.valueOf(3);

          6:将字符串转成大写或则小写。

                 String toUpperCase();

                 String toLowerCase();

               注:字符串和字节数组在转换过程中,是可以指定编码表的。

     4、替换

           String replace(oldChar, newChar);

          注:如果要替换的字符不存在,返回的还是原串。

                  当然还可以直接替换字符串。

     5、切割

            String[] split(regex);

           示例:String s = ”zhangsan,lisi,wangwu”;

                        String[] arr = s.split(”,”);

                        for(int x = 0; x<arr.length;x++)

                       {     System.out.println(arr[x]);}

     6、子串

          获取字符串中的一部分。

           String substring(beginIndex);从指定位置开始到结尾。

           String substring(beginIndex, endIndex);注:不包括endIndex处所对应的字符。

     7、比较

          对两个字符串进行自然顺序的比较。

            int compareTo(string);

            int compareToIgnoreCase(string);忽略大小写。

           注:该比较基于字符串中各个字符的 Unicode 值。

                  如果参数字符串等于此字符串,则返回值 0

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

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

          示例:String s1 =“adc”;

                       String s2 = “aba”;

                       System.out.println(s1.compareTo(s2));

                       dUnicode值比b的大,后面就不比了,s1>s2。返回差值。

      8、去除空格

             将字符串两端的多个空格去除。

              String trim();

3StringBuffer(常见功能-存储、删除和修改)

      字符串的组成原理就是通过该类实现的。

       StringBuffer可以对字符串内容进行增删。

       StringBuffer是一个容器。 buffer就是缓冲区的意思。

      很多方法与String相同。

       StringBuffer是可变长度的。

       缓冲区的特点:

       1:长度是可变的。

       2:可以直接操作多个数据类型。

       3:最终会通过toString方法变成字符串。

      注:数组也是容器,但是长度是不可变的,而且一次只能操作一种数据类型。

       1、存储

             StringBuffer append():将指定数据作为参数添加到已有数据结尾处。

             StringBuffer insert(index,数据):可以将数据插入到指定index位置。

       2、删除

             StringBuffer delete(start,end):删除缓冲区中的数据,包含start不包含end

             StringBuffer deleteCharAt(index):删除指定位置的字符。

       3、获取

            有一个特殊的地方:substring方法返回的是一个String类型。

       4、修改

             StringBuffer replace(start,end,string);不包含end

             void setCharAt(int index,char ch);替换一个字符。

       5、反转

             StringBuffer reverse();

       6、将缓冲区中指定数据存储到指定字符数组中。

             void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);不包含尾。

            另:java升级无外乎三点:提高效率、简化书写、提高安全性。

                   JDK1.5版本之后出现了StringBuilder

                   StringBuffer是线程同步。安全。

                   StringBuilder是线程不同步。效率高。建议单线程用。

                 其实他俩就是有锁没锁的问题。

                  以后开发建议使用StringBuilder

4、基本数据类型对象包装类

      1、基本数据类型包装类(引用数据类型)ByteShortIntegerLongFloatDoubleCharacter类。

      2Integer

            1:整数类型的最大值

                  Integer.MAX_VALUE

      3、基本数据类型对象包装类的最常见作用

           就是用于基本数据类型和字符串之间做转换。

            1:基本数据类型转成字符串。

                  基本数据类型+””

                  static String toString(基本数据类型值);

            2:字符串转成基本数据类型。

                 静态方法:如:static int parseInt(String);

                 非静态方法:如:Double.valueOf(String).doubleValue();

           进制之间转换。

            1:十进制转成其他进制。

                  static String toBinaryString(基本数据类型值); 二进制

                  static String toHexString(基本数据类型值);   十六进制

                  static StringtoOctalString(基本数据类型值);  八进制

           2:其他进制转成十进制。

                如:static int parseInt(string,radix);

      4JDK1.5版本以后出现的新特性。

            1Integer x = new Integer(4);

                可以直接这样写:Integer x = 4; //自动装箱。

                这样可以直接运算:x = x + 2;

                注:x进行自动拆箱(原理:x.intValue())。变成int类型,和2进行加法运算。

                        再将和进行封箱赋给x

                        得确保x不为空的前提下运算。因为有这样的情况x = null;

            2:如:Integer a = 127;

                          Integer b = 127;

                          则,a==b的结果为true。因为ab指向了同一个Integer对象。

                         因为:当数值在byte范围内时,对于新特性,如果该数值已经存在,则不会再开辟新的空间。

 

          本节知识点:

           1、字符串的特殊点以及常见功能。

           2、字符串缓冲区的特点以及常见功能。

           3、基本数据类型对象包装类以及它的作用。

           4JDK1.5版本以后出现的一些新特性。

 

----------------------       android培训java培训期待与您交流!     ----------------------

 

          详细请查看:http://edu.csdn.net