您的位置:首页 > 产品设计 > UI/UE

day15_String类+StringBuffer+StringBuilder

2015-01-02 23:48 162 查看
01-常用对象API(String类-特点) 现在我们将重点转到了这些对象的使用





这里面的其实啊这是两个字符串对象,而这个s吧,它刚才指向的abc吧,现在指向了nba啊,abc没有变吧,s是一个引用型的变量,它可以指向这个,可以指向那个,但是abc不变,String其实是一个类,

 

下面再说另外一个事



怎么就是真也,说一下,在字符串建立时,在内存中有一个字符串缓冲区,我们先说第一句话好了,String  s = "abc",我这里面吧,卡来了字符串吧,它就会先到这个字符串缓冲区中,去查找有abc吗,没有,我们就建了abc,建完以后,再把这个abc的地址值给这个s啊,接着,到了这句话了:String s1 ="abc",它也去字符串常量池中去查找有没有abc啊,有啊,就把这个已有的abc的地址值赋给s1,那就意味着s和s1指向的是同一个地址

/**

     * 演示字符串定义的第一种方式,并明确字符串常量池的特点.

     * 池中没有就建立,池中有,直接用。

     */

    private
static void
stringDemo1() {

        String s = "abc";//"abc"存储在字符串常量池中。

//      s = "nba";

        String s1 = "abc";      

        System.out.println(s==s1);//true?

//      System.out.println("s="+s);

    }

另外一个示例



解释一下为什么就为false

String s = "abc";这句话一执行是在字符串常量池当中创建了一个abc字符串,并把地址赋值给了s引用型变量String s1 = new String("abc");是在堆内存中用new的方式创建了一个string对象,这个对象在构造的时候是不是接受了一个字符串对象,这个new,并没有在字符串常量池中做任何事情



02-常用对象API(String类-构造函数)



65,66这些都是数字吧,到字符串里面变成了字符吗 ,进行acsii码的查表转换

 

 

03-常用对象API(String类-常见功能-获取_1)

 

这里面说一下,我们重点掌握的是面向对象的分析方法,进行分析

假如你见到这样一个字符中:"abcd"你认为它具备什么样的功能比较好一些

比如说有几个字符啊:

你说有四个,别逗了,你认为它有几个字符是不是它自己最清楚啊,这就是面向对象的思考方法,它是不是应该具备这样的功能来告诉我它有几个字符啊,紧接着第二个思考,这个字符串它的第一个字符是啥,第二个是啥啊,第三一个,如果它有b这个字符它在哪个位置上啊,以些类推,我们想要操作字符串,就要先找到对象,然后找其方法就可以了吗,所以也我们就把

讲解第一个:

获取

   获取字符串中的字符的个数(长度啊)

这就是思考方法:

你觉得它要有这功能的话也,这功能的返回值是什么啊,有没有参数,这样去查找方法

记住啊:我们分析完,我们认为有这样的功能,可以到文档里面去查,不能一个一个去看,你怎么去查啊,先看返回值类型,,这就是当年我给你们讲的函数的时候,一直在强调的,函数无非就是两个明确,要么结果,要么未知内容,对象分析的时候,我们也这么去考虑问题,就特别的方便 ,字符串如果有这样的功能,它应该是什么样的结果,有什么样的参数,只要能想清楚这事,,想对以后我就到这个字符串中api中来查这个方法

 

以后就用这种思想去思考分析(根据参数类型,或者返回值这样去查找,)

 

04-常用对象API(String类-常见功能-获取_2)





05-常用对象API(String类-常见功能-转换)

 

小知识点:java最小组成单位是不是字节啊,ascii记录的是美国标准信息交换码,这里面是记录的老美的东西啊,计算机的二进制与数字相对应这就叫做编码表,我们是不是写中文啊,有一个通过的叫做uncode码全世界通用啊,中国编码是怎么编的啊,就是一个中文两个字节编的,而且这两个字节,最高位都是1,所以你看到的是负数,我跟你讲什么数据到计算机里面都是数字,中国最早使用的码表是gb2312表,大概装了6,7千个文字,后面又扩展了gbk,大概装了2万多文字,,后面又扩展gb18多少

 

String转换的有一个方法是静态方法能将基本数据类型转换成一个字符串,这个方法是String.valueOf(基本数据类型)

//      System.out.println(String.valueOf(4)+1);

//      System.out.println(""+4+1)

这两个都ok

 2,转换。

         *     2.1 将字符串变成字符串数组(字符串的切割)

         *         String[]  split(String regex):涉及到正则表达式.

         *     2.2 将字符串变成字符数组。

         *         char[]toCharArray();

         *     2.3 将字符串变成字节数组。

         *         byte[]getBytes();

         *     2.4 将字符串中的字母转成大小写。

         *         StringtoUpperCase():大写

         *         StringtoLowerCase():小写

         *      2.5  将字符串中的内容进行替换

         *          Stringreplace(char oldch,char
newch);

         *         Stringreplace(String s1,String s2);

         *     2.6 将字符串两端的空格去除。

         *         Stringtrim();

         *     2.7 将字符串进行连接 。

         *         String concat(string);

 

private
static void
stringMethodDemo_2(){

       

        String  s = "张三,李四,王五";

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

       

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

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

        }

       

        char[] chs = s.toCharArray();

       

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

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

        }

        s = "ab你";

        byte[] bytes = s.getBytes();

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

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

        }

       

        System.out.println("Abc".toUpperCase());

       

       

        String s1 = "java";

        String s2 = s1.replace('q',
'z');

        System.out.println(s1==s2);//true

       

        System.out.println("-"+"    ab  c   ".trim()+"-");

       

    }

 

06-常用对象API(String类-常见功能-判断)

3,判断

         *     3.1 两个字符串内容是否相同啊?

         *         booleanequals(Object obj);

         *         booleanequalsIgnoreCase(string
str
);忽略大写比较字符串内容。

         *     3.2 字符串中是否包含指定字符串?

         *         booleancontains(string str);

         *     3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。

         *         booleanstartsWith(string);

         *         boolean endsWith(string);

 

private
static void
stringMethodDemo_3(){

        String s = "abc";

        System.out.println(s.equals("ABC".toLowerCase()));

        System.out.println(s.equalsIgnoreCase("ABC"));

       

        System.out.println(s.contains("cc"));

       

        String str  = "ArrayDemo.java";

       

        System.out.println(str.startsWith("Array"));

        System.out.println(str.endsWith(".java"));

        System.out.println(str.contains("Demo"));

 

    }

 

07-常用对象API(String类-常见功能-比较)

* 4,比较。

private
static void
stringMethodDemo_4() {

       

        System.out.println("abc".compareTo("aqz"));

    }

 

基本数值如果能参与比较的数值,它用的只有是大于小于这样的操作运算符,而对于对象的比较用的是方法完成的,因为对象怎么比较是不是对象自己最清楚

 

 

08-常用对象API(String类-intern方法)



//intern():对字符串池进行操作的

       

        String s1 = new String("abc");

        String s2 = s1.intern();

       

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

这个intern我们怎么去理解呢:

这个new的是不是两个对象,这个abc是不是在这个new里面进行维护的啊,而这个s1.intern是不是获取池中的数据啊,这个数据是不是共享数据,如果你要是像上面这样写的话也,是不是把这个abc存到这个池里面去啊s1.intern这是不是从池里面取啊,如果池中有则返回,否则,将此 String 对象添加到池中,并返回此 String 对象的引用。

 

 

 

 

09-常用对象API(String类-练习1-字符串数组排序)

1,给定一个字符串数组。按照字典顺序进行从小到大的排序。

 * {"nba","abc","cba","zz","qq","haha"}

 *

 *

 * 2,一个子串在整串中出现的次数。

 * "nbaernbatynbauinbaopnba"

 *

 *

 *

 * 3,两个字符串中最大相同的子串。

 *

 *

 *

 * 4,模拟一个trim功能一致的方法。

 

 

10-常用对象API(String类-练习2-子串的次数)

对于这个事例吧,我使用的是for循环,显示没有使用while循环好,对于什么时候使用while和什么时候for比较好也,我还要仔细认真好好考虑一下

 

还有3,4两个练习就自己去做一下,再说一下,做练习 的时候吧,一定要把代码实现得最优的形式

 




常用对象API(StringBuffer类-特点&添加功能)

常用对象API(StringBuffer类-插入&删除&查找&修改)





 

常用对象API(StringBuffer类-可变长度数组)

StringBuffer:就是字符串缓冲区。

         * 用于存储数据的容器。

         * 特点:

         * 1,长度的可变的。

         * 2,可以存储不同类型数据。

         * 3,最终要转成字符串进行使用。

         * 4,可以对字符串进行修改。

         *

         *

         * 既然是一个容器对象。应该具备什么功能呢?

         * 1,添加:

         *     StringBuffer append(data);

         *     StringBuffer insert(index,data);

         * 2,删除:

         *     StringBuffer delete(start,end):包含头,不包含尾。

         *     StringBuffer deleteCharAt(int index):删除指定位置的元素

         * 3,查找:

         *     char charAt(index);

         *     int indexOf(string);

         *     int lastIndexOf(string);

         * 4,修改:

         *     StringBuffer replace(start,end,string);

         *     void setCharAt(index,char);

         *

         * 增删改查  C(create)U(update)R(read)D(delete)

private
static void
bufferMethodDemo_1(){

        StringBuffer sb = new StringBuffer("abce");

       

//      sb.append("xixi");

        sb.insert(2, "qq");

       

        System.out.println(sb.toString());

    }

 

    public
static void
bufferMethodDemo(){

        //创建缓冲区对象。

        StringBuffer sb = new StringBuffer();

       

        sb.append(4).append(false);//.append("haha");

        sb.insert(1, "haha");

//      sb.append(true);

       

        System.out.println(sb);

       

    }

private
static void
bufferMethodDemo_2() {

        StringBuffer sb = new StringBuffer("abce");

       

//      sb.delete(1, 3);//ae

       

        //清空缓冲区。

//      sb.delete(0,sb.length());

//      sb = newStringBuffer();

       

//      sb.replace(1, 3, "nba");

//      sb.setCharAt(2, 'q');

       

//      sb.setLength(10);

       

//      System.out.println("sb:"+sb);

//      System.out.println("len:"+sb.length());

       

        System.out.println(sb.reverse());

       

       

    }

 

常用对象API(StringBuilder类)

 jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder

         *

         * 不同的是:

         * StringBuffer是线程同步的。通常用于多线程。

         * StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。

         *

         * jdk升级:

         * 1,简化书写。

         * 2,提高效率。

         * 3,增加安全性。

常用对象API(StringBuilder类-练习)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: