A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱晓杰 中级黑马   /  2013-4-26 20:01  /  2630 人查看  /  11 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

java字符串列(java.lang.String)是java中使用频繁的类,很多时候,我们对他既熟悉又陌生。
一、java.lang.String 和 字符串常量池
                1.String类是final,不可被继承。public final class String
                2. String 对象是不可变,一旦被创建则无法改变,所以在内存中可共享。
                   当我们想要改变一个String对象的时候,jvm不会改变原来的对象,而是生成一个新的String对象,然后重新指向它,如果原来对象没有任何对象去引用,jvm的垃圾回收机制将会回收。
                   例:String name = "张三";//name 指向 “张三”
                            name = "李四";//name 指向 “李四”,且“张三”等待回收         
                3.String类的特殊创建方式,
                        String str = "abc";
                        "abc" 表示一个字符串对象,而 str是"abc"对象的地址,也叫 "abc"对象的引用。
                4.字符串常量池
                  java运行是会维护一个 String pool,用来存放运行时产生的各种字符串,且池中的字符串的内容不重复。
                6.String类的创建方式
                  查询Java Api 可以知道,String类的创建方式有很多,其中最常用的有:
                  (1)String s = new String("abc");//使用new 关键字
                  (2)String s = "abc";
                  (3)String s = "ab" + "c";
                  其他的构造方法的参数,可以参看String类的API文档。
                7.创建感悟:
                  (1)无论使用哪种方式来创建字符串对象,java运行时会在字符串常量池中寻找是否存在内容相同的字符串对象,若不存在,则在字符串常量池中创建,否则不创建,直接指向。
                  (2)java中,只要使用new关键字来创建对象,则一定会创建一个新的对象。
                8.常见操作
                A)查找
                        1.char charAt(int index)//返回指定索引出的字符值
                        例:String str = "abcedfgh";
                                  char ch =  str.charAt(2);//c
                        说明:
                                  第一个 char 值位于索引 0 处。
                                  如果 index 参数为负或小于此字符串的长度,抛出: IndexOutOfBoundsException
                          
                        2.boolean startWith(String prefix)//测试此字符串是否以指定的前缀开始
                        例:String str = "aaccddff";
                                        boolean flag = str.startWith("aa");//true
                        说明:
                            如果参数表示是此字符串前缀,则返回 true;否则返回 false。
                            注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则返回 true。
                       
                        3.boolean endsWith(String suffix) //测试此字符串是否以指定的前缀结束
                        例:String str = "aaa.java.txt";
                                        boolean flag = str.endsWith("java");//false
                        说明:
                                        如果参数表示是此字符串后缀,则返回 true;否则返回 false。
                            注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则返回 true。        
                       
                        4.boolean contains(CharSequence s)//当且仅当此字符串包含指定的 char 值序列时,返回 true
                        例:String str = "abcedfgh";
                                        boolean flag = str.contains("a");//true
                        说明:
                                  如果此字符串包含 s,则返回 true,否则返回 false
                                  如果 s 为 null,抛出:NullPointerException
                       
                        5.int indexOf(int ch) //返回指定字符在此字符串中第一次出现处的索引。

                           int indexOf(int ch, int fromIndex) //返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

                           int indexOf(String str) //返回指定子字符串在此字符串中第一次出现处的索引。

                           int indexOf(String str, int fromIndex) //返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
                           例:String str = "efdfsadddd";
                                         int index = str.indexOf("d");//2
                                         int index1 = str.indexOf("d",3);//6
                                         int index1 = str.indexOf("k");//-1
                           说明:如果此字符串中没有这样的字符,则返回 -1。

                        6.int lastIndexOf(int ch) //返回指定字符在此字符串中最后一次出现处的索引。

                           int lastIndexOf(int ch, int fromIndex) //返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
                       
                           int lastIndexOf(String str) //返回指定子字符串在此字符串中最右边出现处的索引。
                       
                           int lastIndexOf(String str, int fromIndex) //返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
                           说明:与 5 相反
                B)替换
                        1. String replace(char oldChar, char newChar) //返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
                        例:String str = "abababab";
                               str = str.replace('a','b');//bbbbbbbb
                        2. String replaceAll(String regex, String replacement) //使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
                        例:String str = "abababab";
                               str = str.replace("ab","cc");//cccccccc
                        3. String replaceFirst(String regex, String replacement)//使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
                        例:String str = "abababab";
                               str = str.replaceFirst("ab","cc");//ccababab
                C)比较
                        1. int compareTo(String anotherString) //按字典顺序比较两个字符串。
                       例:String str1 = "abc";
                                String str2 = "Abc";
                                int result = str1.compareTo(s2);//32
                       说明:比较原理:依次比较每个字符的字符编码,首先比较两个字符串的第一个字符,
                                                         如果第一个字符串的字符编码大与第二个的字符串的字符编码,则返回大与0的值,
                                                         如果小于则返回小于0的值,如果相等则比较后续的字符,
                                                         如果两个字符串的字符编码完全相同则返回0

                        2.int compareToIgnoreCase(String str) //按字典顺序比较两个字符串,不考虑大小写。 比较原理同上
                        例:String str1 = "abc";
                                 String str2 = "Abc";
                                  int result = str1.compareToIgnoreCase(s2);//0
                       
                        3. boolean equals(Object anObject) //将此字符串与指定的对象比较。
                        例:String str = "abc";
                               boolean flag = str.equals("abc");//true
                        说明:
                              当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。     

                       4. boolean equalsIgnoreCase(String anotherString) //将此 String 与另一个 String 比较,不考虑大小写。   
                D)切割
                        1. String[] split(String regex) //根据给定正则表达式的匹配拆分此字符串,返回一个String数组
                        例:String str = "Hello World!";
                               String[] strs = str.split(" ");

                        2. String substring(int beginIndex)   //返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾
                        例:String str = "Hello world";
                                     str = str.substring(0);//Hello world
                       说明:
                                    如果 beginIndex 为负或大于此 String 对象的长度,抛出:IndexOutOfBoundsException 异常

                        3. String substring(int beginIndex, int endIndex) //返回一个新字符串,它是此字符串的一个子字符串。
                       例:String str = "Hello world";
                                    str = str.substring(0,str.length());//Hello world
                       说明:
                                    如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex,抛出:IndexOutOfBoundsException 异常   
                     
                       注意:包含开始不包含结束
                E)转换
                        1. char[] toCharArray() //将此字符串转换为一个新的字符数组。
                        例:String str = "abcdef";
                               char[] ch = str.toCharArray();//结果返回一个char类型的字符数组
                        2. static String copyValueOf(char[] data) //返回指定数组中表示该字符序列的 String。
                         例:str = String.copyValueOf(ch);//返回 abcdef
                        3. String toLowerCase() //将此 String 中的所有字符都转换为小写。
                       
                        4. String toString() //返回此对象本身(它已经是一个字符串!)。
                       
                        5. String toUpperCase() //将此 String 中的所有字符都转换为大写。
                       
                        6. String trim() //返回字符串的副本,忽略前后空白。
                F)其他
                        1.int length() // 返回字符串的长度
                        2.boolean isEmpty() //判断字符串是否为空,当且仅当 length() 为 0 时返回 true
                        3.String concat(String str) //将指定字符串连接到此字符串的结尾。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

11 个回复

倒序浏览

回帖奖励 +3

给力!!!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
二、StringBuffer类
                1.概述:线程安全的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
                2.创建方式:
                        StringBuffer sb = new StringBuffer();//构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
                        StringBuffer sb = new StringBuffer("Hello world!");// 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
                        StringBuffer sb = new StringBuffer(10);//构造一个不带字符,但具有指定初始容量的字符串缓冲区。
                3.常见操作
                        StringBuffer常见操作与String类大同小异,且比String高效。
                        现列举StringBuffer常用方法
                        StringBuffer append(参数);//可动态追加内容
                        StringBuffer insert(参数);//可动态插入内容
                  StringBuffer reverse();//将字符串反转,比String反转容易多了,简化了代码书写
    4.使用方式
            将StringBuffer转换为String继续操作
            String toString();//返回此序列中数据的字符串表示形式。

三、StringBuilder类
                从 JDK 5 开始,为StringBuffer类补充了一个单个线程使用的等价类,即 StringBuilder。
                与StringBuffer相比,优先使用 StringBuilder 类,它支持所有相同的操作,但由于它不执行同步,所以速度更快。
               
思考题:String、StringBuffer与StringBuilder的区别
                1.三者的使用
                        要操作少量的数据,推荐使用String
                        单线程操作字符串缓冲区操作大量数据,推荐使用StringBuilder
                        多线程操作字符串缓冲区操作大量数据,推荐使用StringBuffer
                2.执行效率比较
                        String < StringBuffer < StringBuilder
                3.StringBuffer:线程安全的
                        StringBuilder:线程非安全的       

四、基本数据类型对象包装类
1、基本数据类型对象列举
基本数据类型           基本数据类型对象包装类
    byte                        Byte
    short                       Short
    int                         Integer
    long                        Long
    float                       Float
    double                      Double
    boolean                     Boolean
    char                        Character
2、基本数据类型对象包装类的意义
   基本数据类型对象包装类封装了我们在使用基本数据类型对象的常见操作,简化了代码书写;
   最大的作用是:使数据基本类型与字符串的相互转换更加简单
   下面以Interger对象简单说明:
   
   String →  int
    基本格式:XxxparseXxx();
   例:String str = "123";
          int num = Integer.parseInt(str);
          int → String
   例:  int num = 132;
             String str = num + "";//方式1
             str = String.valueOf(num);//方式2         
   
3.基本数据类型对象包装类的新特性
  自动装箱
  Integer num = "123";<-> new Integer("123");
  自动拆箱
  Integer sum = 123;
  sum = sum + 456;
  
  Integer a = new Integer("1");
  Integer b = new Integer("1");// a==b 为false

  Integer m = "1";
  Integer n = "1";// a==b 为true
五、简单练习
1.获取一个字符串在另一个字符串中出现的次数(计数器思想)。
2.获取两个字符串的最大字串。
  


   
回复 使用道具 举报
还要再接再励!
回复 使用道具 举报
朱晓杰 发表于 2013-4-26 20:04
还要再接再励!

再接再励!!;P
其实我还没发布String类的任务吧,哈哈
你太积极了,好吧, 下次这个任务可以跳过去
整理的不错,欠缺点示例代码而已,希望你可以再次领取任务
磊哥已经加分,敬请笑纳
回复 使用道具 举报
够强悍够详细,厉害
回复 使用道具 举报
曹睿翔 发表于 2013-4-26 20:19
再接再励!!
其实我还没发布String类的任务吧,哈哈
你太积极了,好吧, 下次这个任务可以跳过去

:L  我被搞晕了,不是直接发帖么?  至于示例代码,明天会加上去的,今天还正在整理呢!
回复 使用道具 举报
朱晓杰 发表于 2013-4-26 20:29
我被搞晕了,不是直接发帖么?  至于示例代码,明天会加上去的,今天还正在整理呢! ...

是直接发帖的,不过我的第一帖里没String 的任务吧
没事,可以慢慢整理
打好基础,技术分妥妥的!
整理吧,对自己只有好处
#####-------疑难问题活动声明------#####    http://bbs.itheima.com/thread-47477-1-1.html
           视频问题收集第一贴                   http://bbs.itheima.com/thread-47174-1-1.html
回复 使用道具 举报
够详细!顶!
回复 使用道具 举报
顶一个...加油!{:soso_e181:}
回复 使用道具 举报
汪平乐 发表于 2013-4-27 12:47
顶一个...加油!

:handshake   加油!
回复 使用道具 举报
jagon 中级黑马 2014-3-13 11:11:46
12#
值得收藏!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马