博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
017_常用API_String类,StringBuffer类和基本数据类型对象包装类
阅读量:7075 次
发布时间:2019-06-28

本文共 9255 字,大约阅读时间需要 30 分钟。

1.String类

  (1)字符串对象

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

                ②字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享

                ③String类中的equals()方法复写了Object类中的内容,其实就是比较字符串内容,而不是比较对象引用。 

public class StringDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        stringDemo2();        stringDemo1();    }    /**     * 演示定义字符串的第二种方式     */    private static void stringDemo2() {        // TODO Auto-generated method stub        String s="abc";//创建一个字符串对象在常量池中                String s1=new String("abc");//创建两个对象,一个new一个在堆内存中                System.out.println(s==s1);                System.out.println(s.equals(s));    }    /**     * 演示定义字符串的第一种方式     */    private static void stringDemo1() {        String s="abc";                String s1="abc";                    System.out.println(s==s1);    }}

  (2)构造函数

    String(byte[] bytes)

      通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。

    String(int[] codePoints, int offset, int count)

      分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符

public class StringConstructorDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        stringConstructorDemo1();    }    private static void stringConstructorDemo1() {        // TODO Auto-generated method stub        char[] arr= {'a','b','c','d'};                String s=new String(arr,1,3);        System.out.println("s1="+s);    }    public static void stringConstructorDemo() {        // TODO Auto-generated method stub        String s=new String();//不等于String s=null;                byte[] arr= {65,66,67};                String s1=new String(arr);        System.out.println("s1="+s1);    }}

  (3)String类常用方法    

    ①获取

      1.1 获取字符串长度 int length()

      1.2 根据位置获取字符 char charAt(int index)

      1.3 根据字符获取第一次出现的位置

          int indexOf(int ch)

        从指定位置开始获取第一次出现的位置

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

        返回指定字符在此字符串中最后一次出现处的索引。 

          int lastIndexOf(int ch)

        返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 

          int lastIndexOf(int ch, int fromIndex)

        返回指定子字符串在此字符串中最右边出现处的索引。

          int lastIndexOf(String str)
        返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
          int lastIndexOf(String str, int fromIndex)
        注意:可以根据-1判断字符或者字符串是否存在

      1.4 获取字符串的子串

          String substring(int beginIndex)
            返回一个新的字符串,它是此字符串的一个子字符串。
          String substring(int beginIndex, int endIndex)
            返回一个新字符串,它是此字符串的一个子字符串。
    ②转换
      2.1将字符串切割成字符串数组
        String[] split(String regex)
       根据给定正则表达式的匹配拆分此字符串。
        String[] split(String regex, int limit)
       根据匹配给定的正则表达式来拆分此字符串
      2.2将字符串变成字符数组
        char[] toCharArray()
      2.3将字符串变成字节数组
        byte[] getBytes()
      2.4将字符串中的字母转换成大写
         String toUpperCase()

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

         String replace(char oldChar, char newChar)

      2.6将字符串两端空格消除

         String trim();
      2.7将字符串进行连接
         String concat();
    ③判断
      3.1两个字符串内容是否相同?
        boolean equals(Object anObject)
        将此 String 与另一个 String 比较,不考虑大小写
        boolean equalsIgnoreCase(String anotherString)
      3.2字符串中是否包含某一字符串?
        boolean contains(CharSequence s)
      3.3字符串是否都以指定字符串开头或结尾
        boolean startsWith(String prefix)
        boolean endsWith(String suffix)
    ④比较
        int compareTo(String anotherString)
          按字典顺序比较两个字符串。
        int compareToIgnoreCase(String str)
          按字典顺序比较两个字符串,不考虑大小写

2.StringBuffer类

  StringBuffer:字符缓冲区,用于存储数据的容器

  (1)特点

    ①长度可变

    ②可以存储不同类型的数据
    ③最终要转成字符串进行使用
    ④可以对字符串进行修改

  (2)功能

    ①添加

      StringBuffer append(data);

    ②插入
      StringBuffer insert(index,data);
    ③删除
      StringBuffer delete(start,end);//包含头,不包含尾
      StringBuffer deleteCharAt(int index);
    ④查找
      char charAt(index)
      int indexOf(String)
      int lastIndexOf(String)
    ⑤修改
      StringBuffer replace(start,end,String)
      void setCharAt(index,char)

  (3)注意

    一个string对象在内存(堆)中被创建出来,它就无法被修改。特别要注意的是,String类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。

    如果你需要一个可修改的字符串,应该使用StringBuffer 或者 StringBuilder,否则会有大量时间浪费在垃圾回收上,因为每次试图修改都有新的string对象被创建出来。

3.StringBuilder类  

    (1)StringBuilder是线程不同步的。通常用于单线程,效率高。

    (2)StringBuffer是线程同步的。通常用于多线程。

4.String类练习

/*1.给定一个字符串数组,按字典顺序进行从小到大的排序。 *  *2.一个子串在整串中出现的个数。 * *3.两个字串中最大的相同子串。 *  *4.模拟一个trim功能一致的方法。*/public class StringTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        //1.给定一个字符串数组,按字典顺序进行从小到大的排序。        String[] arr= {"nba","abc","cba","zz","qq","haha"};        sort(arr);                //2.一个子串在整串中出现的个数。        String str="nbaernbatynbauinbaopnba";        String key="nba";        System.out.println("count=="+getKeyStringCount(str,key));                //3.两个字串中最大的相同子串。        String maxSub=getMaxSubString("qwerabcdeyuion","qwerabcde");        System.out.println("maxSub="+maxSub);                //4.模拟一个trim功能一致的方法        String s="    abc abc   ";        System.out.println("trimSub="+myTrim(s));    }    public static void printArr(String[] arr) {        // TODO Auto-generated method stub        for(int i=0;i
0) { swap(i,j,arr); } } } System.out.println(); System.out.println("排序后:"); printArr(arr); System.out.println(); } public static void swap(int i, int j, String[] arr) { // TODO Auto-generated method stub String temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } public static int getKeyStringCount(String str,String key) { int count=0; int index=0; while((index=str.indexOf(key,index))!=-1) { index=index+key.length(); count++; } return count; } public static String getMaxSubString(String s1,String s2) { String max=(s1.length()>s2.length())?s1:s2; String min=(max.equals(s1))?s2:s1; System.out.println("max="+max); System.out.println("min="+min); /* *abcdefg 7-0 *abcdef bcdefg 7-1 *abcde bcdef cdefg 7-2 *......................... */ for(int i=min.length();i>0;i--) { for(int j=0;j<=min.length()-i;j++) { String sub=min.substring(j, j+i); if(max.contains(sub)) return sub; } } return null; } public static String myTrim(String s) { int start=0,end=s.length()-1; while((start
0&&s.charAt(end)==' ') { end--; } return s.substring(start, end+1); }}

 3.基本数据类型对象包装类

    (1)为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为,用于描述该对象的类就称为基本数据类型对象包装类。

    (2)八种基本数据类型的包装类

       Byte Short Integer Long Float Double Character Boolean

    (3)基本类型-->字符串

      ①基本类型数值+""

      ②用String类中的静态方法valueOf(基本类型数值)
    (4)字符串-->基本类型
      ①使用包装类中的静态方法 xxx parseXxx("xxx类型的字符串");
        eg: int parseInt("intstring");//只有Character类没有parse方法
      ②如果字符串被Integer进行对象的封装
        可使用另一个非静态的方法,intValue()将一个Integer对象转成基本数据类型
    (5)十进制转换为其它进制

        Integer.toBinaryString();

        Integer.toOctalString();
        Integer.toHexString();
    (6)其他进制转换为十进制
        Integer.parseInt(string,radix);

    (7)自动装箱/拆箱

        简化书写。jdk1.5以后,自动装箱,如果装箱的是一个字节,那么该数据会被共享不会被重新开辟空间。

    (8)练习

public class WrapperDemo {        public static final String SAPC_SPERATE=" ";    public static void main(String[] args) {        // TODO Auto-generated method stub                /*System.out.println(Integer.MAX_VALUE);        System.out.println(Integer.toBinaryString(-6));        System.out.println(Boolean.parseBoolean("true"));                System.out.println(Integer.toBinaryString(60));        System.out.println(Integer.toOctalString(60));        System.out.println(Integer.toHexString(60));                System.out.println(Integer.parseInt("3c",16));                Integer i=4;        i+=8;        System.out.println(i);                //自动拆箱装箱        Integer x=127;        Integer y=127;                System.out.println(x==y);        System.out.println(x.equals(y));                Integer a=128;        Integer b=128;                System.out.println(a==b);        System.out.println(a.equals(b));        */                String s="20 78 9 -7 88 36 29";                System.out.println(s);        s=sortStringNumber(s);        System.out.println(s);            }    public static String sortStringNumber(String str) {        // TODO Auto-generated method stub        /*         * 1.对字符串进行分割         * 2.将字符串数组变成int数组         * 3.对int数组进行排序         * 4.将int数组变成字符串         * */         String[] strArray=str.split(SAPC_SPERATE);                  int[] intArray=stringArrayToIntArray(strArray);                  Arrays.sort(intArray);                  str=intArrayToStringArray(intArray);         return str;    }        private static String intArrayToStringArray(int[] intArray) {        // TODO Auto-generated method stub        StringBuffer str=new StringBuffer();                for(int i=0;i

 

转载于:https://www.cnblogs.com/lydbky/p/8322258.html

你可能感兴趣的文章
.net Application的目录
查看>>
洛谷 P1313 计算系数 Label:杨辉三角形 多项式计算
查看>>
YUV色彩空间(转自百度百科)
查看>>
创建服务
查看>>
Sencha Touch 2.1学习图表Chart概述
查看>>
NYOJ467 中缀式变后缀式
查看>>
qwq
查看>>
C#中timer类的用法
查看>>
shell脚本学习
查看>>
自动化交易机器人Beta猪
查看>>
最少的次数
查看>>
用vue开发单页应用的一些心得
查看>>
步步为营:SQLServer查询随机不相同的记录插入临时表
查看>>
About SOuP
查看>>
【12c OCP】CUUG OCP认证071考试原题解析(36)
查看>>
join
查看>>
今天linux遇到的问题
查看>>
LeetCode:Balanced Binary Tree
查看>>
4.时间复杂度和空间复杂度-2
查看>>
华为架构师8年经验谈:从单体架构到微服务的服务化演进之路
查看>>