zoukankan      html  css  js  c++  java
  • Java基础---String类和基本数据类型包装类

    第一讲     String类

    一、概述

            String是字符串的类类型,用于描述字符串事物。字符串是一个特殊的对象。特殊之处就在于:

            Stings= new String();和String s1=””;两种写法都是在创建对象,使用起来一样。

    二、特点

            字符串最大的特点就是:一旦被初始化就不可以被改变。

    例:

            String s1=“abc”;

            String s2 = new String(“abc”);

            String s3=“abc”;

    比较的结果:

            s1==s2   ( false )

            s1.equals(s2) ( true )

            //String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。

            s1==s3   ( true )  

            //因为“abc”这个字符串对象已经在内存中存在,作为字符串这种特殊的对象,这种在常量池中存在的数据。s3进行初始化时,发现abc已经在内存中存在,就不会再独立开辟空间,因为再开辟空间就比较浪费空间。因此为了节约内存,在字符串对象当中只要字符串相同,那么s1和s3就指向同一个对象。

    s1和s2淘宝开店教程的区别:

            s1在内存中有一个对象。

            s2在内存中有两个对象。            

    三、常见操作方法

    1、获取

            1.1字符串中包含的字符数,也就是字符串的长度

                   int   length()://获取长度。

            1.2根据位置获取位置上的某个字符

                   char  charAt(int  index)://当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。

            1.3根据字符获取该字符存在字符串的位置

                  int  indexOf(int ch)://返回的是ch在字符串中第一次出现的位置。//传入的是字符对应的ASCII码。//如果没有找到,返回-1。

                  int  indexOf(int ch,int fromIndex)://从fromIndex指定位置开始,获取ch在字符串中出现的位置。

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

                  int  indexOf(String str,int fromIndex)://从fromIndex指定位置开始,获取str在字符串中出现的位置。

                  int  lastIndexOf()://反向索引 

    2、判断

            2.1字符串中是否包含某一个子串

                  booleancontains(str);

            //特殊之处:indexOf(str)可以索引str第一次出现的位置,如果返回-1表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。如:if(str.indexOf(“aa”)!=-1)而且该方法既可以判断,又可以获取出现的位置。如果只为判断,用contains。

            2.2字符串中是否有内容

                  booleanifEmpty();//原理就是判断长度是否为0。

            2.3字符串是否是以指定内容开头

                  booleanstartsWith(str);

            2.4字符串是否是以指定内容结尾

                  booleanendsWith(str);

            2.5判断字符串内容是否相同,复写了Object类中的equals方法

                  booleanequals(str);

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

                  booleanequalsIgnoreCase();

    3、转换

            3.1将字符数组转成字符串

                 构造函数:String (char[]);

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

                 静态方法:

                                     static String copyValueOf(char[]);

                                     staticString copyValueOf(char[] data,int offset ,int count );

                                     static String valueOf(char[]);

            3.2将字符串转成字符数组

                  char[]toCharArray();

            3.3将字节数组转成字符串

                  String (byte[]);

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

            3.4将字符串转成字节数组

                  byte[]getBytes();

            3.5将基本数据类型转成字符串

                  StringvalueOf(int);

                  StringvalueOf(double);

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

    4、替换

            Stringreplace(oldchar,newchar);//返回的是一个新字符串。如果要替换的字符不存在,返回的还是原字符串。

    5、切割

            String[] split(regex);//涉及到正则表达式的点,不能作为切割字符串的regex。

    6、子串,获取字符串中的一部分

            String substring(begin);//从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。

            Stringsubstring(begin,end);//包含头,不包含尾。

    7、转换,去除空格,比较

            7.1将字符串转成大写或小写

                  StringtoUpperCase();

                  String toLowerCase();

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

                  String trim();        

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

                  intcompareTo(String);

    实例练习:

    1、

    [java] view plaincopy
     
    1. /* 
    2. 需求:获取一个字符串在另一个字符串中出现的次数 
    3. 思路:1、定义一计数器 
    4.       2、获得字符串第一次在另个字符中出现的位置 
    5.       3、从第一次出现的位置后剩余的字符串中继续获取字符串出现的次数,每出现一次,计数器就加一次 
    6.       3、当获取不到时候,计数停止 
    7. */  
    8. class  CountTest  
    9. {  
    10.     public static void main(String[] args)   
    11.     {  
    12.         String s="Hllello Worlld!";  
    13.         sop("s="+s);  
    14.       
    15.         sop("count="+count(s,"ll"));  
    16.     }  
    17.   
    18.     public static int count(String s,String key)  
    19.     {  
    20.         int count=0;//定义计数器  
    21.         int index=0;//定义获取角标变量  
    22.         while((index=s.indexOf(key,index))!=-1)//如果包含,则继续  
    23.         {  
    24.             index=index+key.length();//从找到的子串位置后一位开始获取  
    25.             count++;  
    26.         }  
    27.         return count;  
    28.     }  
    29.   
    30.     private static  void sop(Object obj)  
    31.     {  
    32.         System.out.println(obj);  
    33.     }  
    34.   
    35. }  

    结果:

                 

    2、

    [java] view plaincopy
     
    1. /* 
    2. 需求:将一个字符串反转 
    3. 思路:1、将字符串转换为字符数组 
    4.       2、将数组反转 
    5.       3、将字符数组转换为字符串 
    6. */  
    7. class ReverseTest   
    8. {  
    9.     public static void sop(Object obj)  
    10.     {  
    11.         System.out.println(obj);  
    12.     }  
    13.     public static void main(String[] args)   
    14.     {  
    15.         String s="abca dv daf";  
    16.         sop(s);  
    17.           
    18. //      ReverseString r=new ReverseString();  
    19.   
    20.         sop(new ReverseString().reverseString(s));  
    21.     }  
    22.   
    23. }  
    24. class ReverseString  
    25. {  
    26.       
    27.     public static String  reverseString(String s,int start,int end)  
    28.     {  
    29.         //将字符串变为字符数组  
    30.         char[] ch=s.toCharArray();  
    31.   
    32.         //将数组进行反转  
    33.         charReverse(ch,start,end);  
    34.           
    35.         //将字符数组变为字符串  
    36.         return new String().valueOf(ch);  
    37.   
    38.     }  
    39.     //反转整个字符串  
    40.     public static String reverseString(String s)  
    41.     {  
    42.         return reverseString(s,0,s.length());  
    43.     }  
    44.       
    45.     //反转指定字符数组位置  
    46.     private static void charReverse(char[] ch,int start,int end)  
    47.     {  
    48.         for (int x=start,y=end-1; x<y;x++,y--)  
    49.         {  
    50.             swap(ch,x,y);  
    51.         }  
    52.     }  
    53.       
    54.     //交换相应数组元素  
    55.     private static  void swap(char[] ch, int start,int end)  
    56.     {     
    57.         char temp=ch[start];  
    58.         ch[start]=ch[end];  
    59.         ch[end]=temp;  
    60.     }  
    61. }  

    结果:

          

    3、

    [java] view plaincopy
     
    1. /* 
    2. 需求:获取两个字符串中最大相同子串 
    3. 思路:1、将短的一个字符串与长的进行比较,如果没有,则将短串的字串按长度递减的方式获取 
    4.       2、将每次获取的子串,去长串中判断是否包含,包含即找到。 
    5. */  
    6. class  MaxSubstring  
    7. {  
    8.     public static void main(String[] args)   
    9.     {  
    10.         String s1="HelloafsfWorldcgagb!";  
    11.         String s2="fWorldafdffsfsfsfsfdc";  
    12.         sop(getMaxSubstring(s1,s2));  
    13.     }  
    14.   
    15.     public static String getMaxSubstring(String s1,String s2)  
    16.     {  
    17.         String max,min;  
    18.         max=(s1.length()>s2.length())?s1:s2;//判断出大字符串  
    19.         min=(max==s1)?s2:s1;//判断出小字符串  
    20.   
    21.         for (int x=0;x<min.length() ;x++ )//外循环,控制在最短字串长度内  
    22.         {  
    23.             for (int y=0,z=min.length()-x;z<min.length()+1; y++,z++)//依次递减短字符串子串  
    24.             {  
    25.                 String temp=min.substring(y,z);//获取短字符串子串  
    26.                 if(max.contains(temp))//如果长串包含,则表示找到  
    27.                     return temp;  
    28.             }  
    29.         }  
    30.         return "没有相同的字符串";  
    31.     }  
    32.   
    33.     //打印输出  
    34.     public static void sop(Object obj)  
    35.     {  
    36.         System.out.println(obj);  
    37.     }  
    38. }  

    结果:

           

    4、

    [java] view plaincopy
     
    1. /* 
    2. 需求:对一个字符串中的字符进行自然排序 
    3. 思路:1、将字符串转换为字符数组。 
    4.       2、对字符数组进行选择、冒泡排序 
    5.       3、将排好序的字符数组转换为字符串 
    6.  
    7. */  
    8.   
    9.   
    10.   
    11. class  RaturalSortString  
    12. {  
    13.     public static void main(String[] args)  
    14.     {  
    15.         String s="vcz1bdaA+cs";  
    16.         sop(s);//打印原字符串  
    17.   
    18.         sop(raturalSortString(s));//打印排序后的字符串  
    19.   
    20.         sop(getLowerCaseString(raturalSortString(s)));//打印排序后的小写字母部分  
    21.     }  
    22.   
    23.   
    24.     //取出有序字符串中的小写字母部分  
    25.     public static String getLowerCaseString(String s)  
    26.     {  
    27.         int[] arr=lowerCaseIndex(s);  
    28.   
    29.         return s.substring(arr[0],arr[1]);  
    30.     }  
    31.     //对字符串中的小写字母进行自然排序的方法  
    32.     public static String raturalSortString(String s)  
    33.     {  
    34.         //将字符串转换为字符数组  
    35.         char[] arr = s.toCharArray();  
    36.   
    37.         //将字符数组进行排序  
    38.         selectSortArray(arr);  
    39.           
    40.         //将排序好的字符数组转换为字符串返回  
    41.         return new String(arr);  
    42.     }  
    43.   
    44.     //对数组进行选择排序  
    45.     private static void selectSortArray(char[] arr)  
    46.     {  
    47.         for (int x=0; x<arr.length-1; x++)  
    48.         {  
    49.             for (int y=x+1;y<arr.length ; y++)  
    50.             {  
    51.                 if(arr[x]>arr[y])  
    52.                     swap(arr,x,y);  
    53.             }  
    54.         }  
    55.     }  
    56.       
    57.     //交换数组两元素  
    58.     private static void swap(char[] arr ,int x,int y )  
    59.     {  
    60.         arr[x]=(char)(arr[x]^arr[y]);  
    61.         arr[y]=(char)(arr[x]^arr[y]);  
    62.         arr[x]=(char)(arr[x]^arr[y]);  
    63.     }  
    64.   
    65.     //判断小写字母部分在有序字符串中的位置,并将第一个的位置和最后一个的位置存在一个数组中,返回数组  
    66.     private static int[] lowerCaseIndex(String s)  
    67.     {     
    68.           
    69.         //将字符串转换为字符数组  
    70.         char[] arr = s.toCharArray();  
    71.   
    72.         int x=0;  
    73.         for(;arr[x]<'a';x++);  
    74.   
    75.         int y=arr.length-1;  
    76.         for(;arr[y]>'z';y--);  
    77.   
    78.         int[] a = {x,y+1};  
    79.   
    80.         return a;  
    81.           
    82.     }  
    83.     //打印  
    84.     private static void sop(Object obj)  
    85.     {  
    86.         System.out.println(obj);  
    87.     }  
    88. }  

    结果:

          

    第二讲     StringBuffer

    一、概述

            StringBuffer是一个容器,字符串的组成原理就是通过该类实现的。StringBuffer可以对字符串内容进行增删改查等操作,很多方法和String相同。

    二、特点

            1、而且长度是可变化的。(数组是固定的)

            2、可以直接操作多个数据类型。(数组只能操作一个)

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

    三、常见操作

    1、存储

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

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

    2、删除

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

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

            清空缓冲区:对象.delete(0,对象.length());

    3、获取

            char charAt(int index);

            int indexOf(String str);

            int lastIndexOf(String str);

            int length();

            String substring(int start,int end);

    4、修改

            StringBuffer replace(int start,int end,String str);

            void setCharAt(int index,char ch);

    5、反转

            StringBuffer reverse();

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

            voidgetChars(int srcBegin, int srcEnd,char[] dst,int dstBegin)

    在JDK1.5版本之后出现了StringBuilder。

            StringBuffer是线程同步的。有锁。效率低伤感的句子

            StringBuilder是线程不同步的。无锁。效率高

    以后开发,建议使用StringBuilder。如遇多线程,使用StringBuffer或自己加锁。

    升级三因素:

            1、提高效率

            2、简化书写

            3、提高安全性。

    第三讲     基本数据类型包装类 

            将基本数据类型封装成对象的好处,在于可以在对象中定义更多的功能方法操作该数据。基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。下面我们来了解包装类的写法形式和常用方法。

    一、基本数据类型对象包装类。

            byte               Byte

            short              Short

            int                  Integer

            long               Long

            boolean          Boolean

            float               Float

            double           Double

            char               Character

     

    二、基本数据类型转成字符串

            基本数据类型+" "

            基本数据类型.toString(基本数据类型值);

            如:Integer.toString(34);//将34整数变成"34"。

    三、字符串转成基本数据类型。

             xxx a=Xxx.parseXxx(string);//必须传入对应类型的字符串。

            如   inta=Integer.parseInt("123");//静态

            booleanb=Boolean.parseBoolean("true");

            Integeri=new Integer("123");

            intnum=i.intValue();//跟上面的静态方式的结果一样,但这种属于对象调用方式。

    注意:

            在使用时,Integer  x = null;上面的代码就会出现NullPointerException。

    四、十进制转成其他进制。

             toBinaryString();

             toHexString(); 

             toOctalString();

    五、其他进制转成十进制。

             parseInt(String,radix);

             如:int a= Intager.parseInt("3c",16);

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

                             Integer x=new Integer(4);

             等效于:Integer x=4;//自动装箱。

            还可以直接进行运算:x=x+2;//x进行自动拆箱。变成了int类型。和2进行加法运算。再将和进行装箱赋给x。x的拆箱动作等效:x.intValue()。

    六、示例

            Integer x=128;

            Integer y=128;

            x==y   (false)

            Integer m=127;

            Integer n=127;

            m==n ( true)

    原因:

            因为m和n指向了同一个Integer对象。因为当数值在byte范围内,对于新特性,如果该数组已经存在,则不会再开辟新的空间。

    七、小练习

    [java] view plaincopy
     
    1. /* 
    2. "12 0 99 -7 30 4 100 13 -6" 
    3. 要求对字符串中的数值进行排序。生成一个数值从小到大新字符串。 
    4.  
    5. "-7 -6 0 4 12 13 30 99 100" 
    6.  
    7. 思路:1、将字符串切割为字符串数组 
    8.       2、将字符串数组转换为整数类型数组 
    9.       3、对整数类型数组进行冒泡排序 
    10.       4、将排序后的整数类型数组转换为字符串 
    11. */  
    12.   
    13. class  StringSort  
    14. {  
    15.     public static void main(String[] args)   
    16.     {  
    17.         String s="12 0 99 -7 30 4 100 13 -6";  
    18.         sop(s);  
    19.           
    20.   
    21.         sop(stringSort(s));  
    22.     }  
    23.   
    24.     public static String stringSort(String s)  
    25.     {  
    26.         //将字符串切割成字符串数组  
    27.         String[] str=s.split(" ");  
    28.   
    29.         //将字符串数组转换为整数类型数组  
    30.         int[] arr=stringToInt(str);  
    31.           
    32.         // 对整数类型数组进行冒泡排序  
    33.         bubbleSort(arr);  
    34.   
    35.         //将排序后的整数类型数组转换为字符串  
    36.         return intToString(arr).toString();  
    37.     }  
    38.   
    39.     // 将字符串数组转换为整数类型数组方法  
    40.     private static int[] stringToInt(String[] str)  
    41.     {  
    42.         int[] arr=new int[str.length];  
    43.         for(int x=0;x<str.length;x++)  
    44.         {     
    45.             arr[x]=Integer.parseInt(str[x]);  
    46. //          sop(arr[x]);  
    47.           
    48.         }  
    49.     //  sop(arr);  
    50.         return arr;  
    51.     }  
    52.       
    53.     //对数组进行冒泡排序  
    54.     private static void bubbleSort(int[] arr)  
    55.     {  
    56.         for (int x=0;x<arr.length ;x++ )  
    57.         {  
    58.             for (int y=0;y<arr.length-x-1; y++)  
    59.             {  
    60.                 if(arr[y]>arr[y+1])  
    61.                     swap(arr,y,y+1);  
    62.             }  
    63.         }  
    64.     //  sop(arr);  
    65.     }  
    66.   
    67.     //交换数组中的两元素  
    68.     private static void swap(int[] arr,int x,int y)  
    69.     {  
    70.         arr[x]=arr[x]^arr[y];  
    71.         arr[y]=arr[x]^arr[y];  
    72.         arr[x]=arr[x]^arr[y];  
    73. //      int temp=arr[x];  
    74. //      arr[x]=arr[y];  
    75. //      arr[y]=temp;  
    76.     }  
    77.       
    78.     //将整数类型数组存放到一个StringBuiler容器中  
    79.     private static StringBuilder intToString(int[] arr)  
    80.     {  
    81.         StringBuilder sb=new StringBuilder();  
    82.         for (int x=0;x<arr.length-1; x++)  
    83.         {     
    84.             sb.append(arr[x]+" ");  
    85.         }  
    86.         sb.append(arr[arr.length-1]+"");  
    87.   
    88.         return sb;  
    89.     }  
    90.   
    91.     //打印字符串  
    92.     private static void sop(Object obj)  
    93.     {  
    94.         System.out.println(obj);  
    95.     }  
    96.   
    97.     //遍历数组  
    98.     private static void sop(int[] arr)  
    99.     {  
    100.         for (int x=0; x<arr.length;x++ )  
    101.         {  
    102.             System.out.print(arr[x]+" ");  
    103.         }  
    104.         System.out.println();  
    105.     }  
    106. }  

    结果:

           

  • 相关阅读:
    【洛谷P2839】middle
    【洛谷P2495】消耗战
    【CF1438D】Powerful Ksenia
    【CF878E】Numbers on the blackboard
    【洛谷U138580】简单的打击
    【洛谷P4774】屠龙勇士
    【GMOJ5363】生命之树
    【YbtOJ#20075】区间异或
    【YbtOJ#20077】计划带师
    hdu 2688
  • 原文地址:https://www.cnblogs.com/tiankong101/p/4227158.html
Copyright © 2011-2022 走看看