黑马----String,StringBuffer,基本数据类型对象包装类浅记

来源:互联网 发布:php经典实例 编辑:程序博客网 时间:2024/06/07 11:28

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

 

一.String:

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

String str="abc";//str是一个类类型变量,所以“abc”是一个对象
 
String str1=new String("abc");
public final class String

String s=new String();
String s1="";
===============================
String类适用于描述字符串事物

那么它就提供了多个方法对字符串进行操作

常见的操作有哪些?


1.获取

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

         int length();获取长度
   

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

         char charAt(int index);
    

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

         int indexOf(int ch);//返回的是ch在字符串中第一次出现的位置
         int indexOf(int ch,int fromIndex)//从fromIndex指定位置开始,获取ch在字符串中出现的位置
        
int indexOf(String str)//返回的是str 在字符串中第一次出现的位置
         int indexOf(String str, int fromIndex)//从fromIndex指定位置开始,获取str在字符串中出现的位置
         int lastIndexOf(int ch);反向索引


2.判断
   2.1字符串中是否包含某一个子串
        

         boolean contains(str);  
 

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

   2.2字符串中是否有内容 
  

        boolean isEmpty();原理就是判断长度是否为0
 

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

        boolean startsWith(str);
 

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

        boolean endsWith(str);
  

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

        boolean equals(str);

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

        boolean equalsIgnoreCase();
3.转换
   3.1将字符数组转成字符串
  

           构造函数:String(char[])
                             String(char[],offset,count):将字符数组中的一部分转成字符串
 
            静态方法:
                            static String copyValueOf(char[]);
                            static String copyValueOf(char[] data,int offset, int count);
                            static String valueOf(char[]);

     3.2将字符串转成字符数组

            char[] toCharArray();

 

    3.3将字节数组转成字符串
         

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

           byte[] getBytes();
 

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

           static String valueOf(int);
           static String valueOf(double);
   特殊:字符串和字节数组在转换过程中,是可以指定编码表的


4.替换:
           String replace(char oldchar,char newchar);
            注意:如果要替换的字符不存在,就返回原串
5.切割

      String[] split(regex);

6.子串:获取字符串中的一部分

      String substring(int begin); 
      String substring(int beginIndex,int endIndex)//包含头,不包含尾

7.转换:去除空格,比较
 

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

           String toUpperCase();
           String toLowerCase();
 

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

           String trim();
 

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

            int compareTo(string);

 

8字符串练习:
(1.)模拟一个trim方法,去除字符串两端的空格
  思路:
  1.)判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止
    结尾处判断空格也是如此
  2.)当开始和结尾都判断到不是空格时,就是要获取的字符串
class StringTest
{
     public static void sop(String str)
     {

           System.out.println(str);


     }
     public static void main(String[] args)
     {
        String s="    ab cd     ";
        sop("("+s+")");
        s=myTrim(s);
        sop("("+s+")");


     }
     public static String myTrim(String str)
     {
        int start=0;end=str.length()-1;
        while(start<=end && str.charAt(start)==' ')
        start++;
        while(start<=end && str.charAt(end)==' ')
        end--;
        return str.substring(start,end+1);
     }
}
(2)将一个字符串进行反转,将字符串中指定部分进行反转,“abcdefg”;abfedcg
   思路:
  1.)曾经学习过对数组的元素进行反转,
  2.)将字符串变成数组,对数组反转,
  3.)将反转后的数组变成字符串
  4.)只要将或反转的部分的开始和结束位置作为参数传递即可。
class StringTest

     public static void sop(String str)
     {
          System.out.println(str);

      }
      public static void main(String[] args)
      {
         String s="      ab cd     ";
         sop("("+s+")");
         sop("("+reverseString(s,6,9)+")");
         sop("("+reverseString(s)+")");

      }

 


 public static String reverseString(String s,int start,int end)
  {
      char[] chs=s.toCharArray();
      reverse(chs,start,end);
      return new String(chs);
   }
   public static String reverseString(String s)
   {
           return reverseString(s,0,s.length());

   }
   private static void reverse(char[] arr,int x,int y)
   {
        for(int start=x,end=y-1;start<end;start++,end--)
        {
              swap(arr,start,end);

        }

 

    }
    private static void swap(char[] arr,int x,int y)
    {
      char temp=arr[x];
      arr[x]=arr[y];
      arr[y]=temp;

 

     }
}
(3.)获取一个字符串在另一个字符串中出现的次数
  “abkkcdkkefkkskk”
  思路:
  1.)定义一个计数器
  2.)获取kk第一次出现的位置
  3.)从第一次出现位置后剩余的字符串中继续获取kk出现的位置,每获取一次就计数一次
  4.)当获取不到时,计数完成,
class StringTest2
{
 public static int getSubCout(String str,String key)
        {
  int count=0;
  int index=0;
  while((index=str.indexOf(key)!=-1))
  {
    sop("str="+str);
   str=str.substring(index+key.length());
   count++;

  }
  return count;
 }
 
 public static void main(String[] args)
 {
  String str="abkkcdkkefkkskk";
  sop("count="+getSubCount(str,"kk"));


         }
 public static void sop(String str)
 {

  System.out.println(str);


 }
}


方法二:
class StringTest2
{
 public static int getSubCount_2(String str,String key)
 {
  int count=0;
  int index=0;
  while((index=str.indexOf(key,index))!=-1)
  {
   sop("index="+index);
   index=index+key.length();
   count++;
  }
  return count;
 }
 public static void main(String[] args)
 {
  String str="abkkcdkkefkkskk";
  sop("count="+getSubCount_2(str,"kk"));

 }
 public static void sop(String str)
 {

  System.out.println(str);
 }
)

(4.)获取两个字符串中最大相同子串,第一个动作:将短的那个串进行长度依次递减的子串打印
“abcwerthelloyuiodef”
  "cvhellobnm"
思路:
  1.)将短的那个子串按照长度递减的方式获取到,
  2.)将每获取到的子串去长串中判断是否包含,如果包含,已经找到了
class StringTest3
{
 public static String getMaxSubString(String s1,String s2)
 {
  String max="",min="";
  max=(s1.length()>s2.length())?s1:s2;
  min=(max==s1)?s2:s1;


  for(int x=0;x<s2.length();x++)
  {
   for(int y=0;z=min.length()-x;z!=min.length()+1;y++,z++)
   {
    String temp=min.substring(y,z);

    //sop(temp);
    if(max.contains(temp))
    return temp;

   }

  }

  return " ";
 }

 

 public static void main(String[] args)
 {
  String s1="cvhellobnm";
  String s2="abcwerthelloyuiodef";
  sop(getMaxSubString(s2,s1));

 }
 public Static void sop(String str)
 {

  System.out.println(str);
 }


}
========================================================
二.StringBuffer


特点:
1.长度是可变化的
2.可以直接操作多个数据类型
3.最终会通过tostring方法变成字符串

 

 

操作:

 

1.存储

      StringBuffer append();将指定数据作为参数添加到已胡数据结尾处
      StringBuffer insert(index,数据):可以将数据插入到指定index位置

 2.删除

      StringBuffer delete(int start,int end );//删除缓冲区中的数据,包含Start,包含end
      StringBuffer deleteCharAt(index);//删除指定位置的字符

 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.将缓冲区中指定数据存储到指定字符数组中
 

     void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)
=======================================
JDK1.5版本之后出现了StringBuilder


StringBuffer是线程同步的
StringBuilder是线程不同步的


StringBuilder是一个可变的字符序列,此类提供一个与StringBuffer兼容的API
但不保证同步,该类被设计用作StringBuffer的一个简易替换,用在字符缓冲区被单个
线程使用的时候,如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快


升级三个因素:
1.提高效率
2.简化书写
3.提高安全性
========================================
三.基本数据类型对象包装类
byte------Byte

short-----Short

 

long------Long

boolean---Boolean

float-----Float

double----Double

char------Character

int-------Integer(类):在对象中包装了一个基本类型int的值,Integer类型的对象包含一个int类型的字段
                                此外,该类提供了多个方法,能在int类型和String类型之间互相转换,还提供了处理int类型时非常有用的其他一些常量和方法:
 static int MAX_VALUE:它表示int类型能够表示的最大值
 static int MIN_VALUE:它表示int类型能够表示的最小值
 static int SIZE:用来以二进制补码形式表示int值的比特位数
 static Class<Integer>TYPE:表示基本类型int 的Class实例

 

1.构造方法:Integer(int value):构造一个新分配的Integer对象,它表示指定的int值
                   Integer(String s):构造一个新分配的Integer对象 ,它表示String参数所指示的int值

2.基本数据类型对象包装类的最常见作用: 就是用于基本数据类型和字符串类型之间做转换

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

          基本数据类型+""
          基本数据类型.toString(基本数据类型值);
         如:Integer.toString(34);//将34整数变成"34";


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

          xxx a=Xxx.parseXxx(String s);
          static int parseInt(String s);
          如:int num=Integer.parseInt("123");//必须传入数字格式的字符串
         double b=Double.parseDouble("12.23");
         boolean b=Boolean.parseBoolean("true");
         Integer i=new Integer("123");
         int num=i.intValue();

3)十进制转成其它进制:
  

        toBinaryString();
        toHexString();
        toOctalString();
4)其它进制转成十进制:
 

       parseInt(String s,int radix);

 

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

       Integer x=4;//自动装箱
       x=x+2;//x是一个对象,却可以直接进行运算,是因为x进行自动拆箱(x.intValue()),变成了int类型,和2进行加法运算再将和进行装箱赋给x。
注意:当数值在byte范围内,对于新特性,如果该数值已经存在,则不会再开辟新的空间。

 

 

 

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

原创粉丝点击