天天看点

黑马程序员------java基础String

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

String类

String s1 = "abc"//s1 是一个类类型变量,"abc是一个对象"。

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

s1 = "kk";// s1指向变了,"abc"并未改变

__________________________________

String s1 = "abc";

Sttring s2 = new String("abc");

//s1和s2有什么区别

s1在内存中有一个对象。

s2在内存中有2个对象。:new 了一个和"abc"

String s1 = "abc";

String s2 = new String("abc");

String s3 = "abc";

s1 == s3 :true;

"adc"在常量池中

//String 类复写了Object类中的equals方法,

该方法用于判断字符串是否相同。

String常见功能:

"abcd"

1 获取和判断

获取:

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

    int  length():获取长度

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

    char charAt(int index)://当访问到字符串中不存在的脚标示会出现StringIndexOutOFBundensException

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

    int  indexof(int ch):返回的是ch在字符串中第一次出现的位置。注释:ch为字符的ASCALL码

    int  indexof(int ch,int fromIndex):从fromIndex开始,返回第一次出现ch的位置

    int  lastindexof(int ch);反向索引一个字符的位置。

    int  indexof(String str):返回str在字符串中的位置

    int  indexof(String str,intformIndex);

    注释:indexof(int ch); 当字符不在字符串中时返回-1;

判断:

    字符串中是否包含某个子串。    boolean  contains(str);

                                  特殊之处:indexof(str):可以索引str第一次出现的位置,如果返回-1

                                  表示str不存在于字符串中,所以也可以用于对指定str判断是否包含。

                                  if (str.indexof("aa")!=-1)

    字符串中是否有内容。          boolean  isEmpty();//当仅当length ==0时为真

    字符串是否以指定内容的开头。  boolean  startsWith(String str);

    字符串是否以指定的内容结尾.   boolean  endsWith(String str);

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

    boolean equals(str);

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

    boolean equalsIgnoreCase(str);

转换:

    1 将字符数组转成字符串。

       构造函数:String(char[])

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

       static String  copyValueof(char[]);

       static String  copyValueof (char[],int offset,int count);

    2 将字符串转成字符数组。

                 char[] toCharArray();     

    3 将字节数组转换成字符串。?

         String(byte[])

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

    4 将字符串转成字节数组。?

           byte[] getBytes();

    5 将基本数据类型转换为字符串。

       static String valueof(int)

       static String valueof(double);

       //3 +"";//String.valueOf(3)

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

切割和替换:

      替换:

       String replace(oldchar,newchar);//如果要替换的字符不存在,返回的还是原串

       String s = "hello java";

       String s1 = s.replace('a','n');//返回的是一个新字符串

       此时  s 的值任然为  "hello java"

             s1的值为:"hello jnvn"     

       String  replace(char)

切割:

      String[] split(regex);//处理问题:String s = "zhangsan,lisi,wangwu";

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

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

     String  substring(begin);//如果角标不存在,会出现字符串角标越界异常。

     String  substring(begin,end);//注:[begin,end);前闭后开

转换,去除空格,比较

     1  将字符串转换成大写或者小写

         String  toUpperCase();

         String  toLowerCase();

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

         String trim();

     3  对2个字符串进行自然顺序的比较

         int  compareTo(String);// 等于0,大于返回正数,小于返回负数

关于字符串的几个练习

1  去除字符串2端多个空格

public  String  String myTrim(String str)
{
  int start =0;
  int end = str.length()-1;
   while(str.charAt(start)==' ')
       start ++;
   while(str.charAt(end)==' ')
      end--;
   
  return(str.subString(start,end+1));
}
           

2  将字符串反转

public  String  String myTrim(String str)
{
   char[] arr = str.toCharArray();
   int start = 0;
   int end = arr.length -1;
   char temp = ' ';
   while(start<end)
   {
       temp = arr[start];
       arr[start] = arr[end];
       arr[end] = temp;

    }
   
  return new String(arr);
}
           

3  获取一个字符串中另一个字符串出现的次数 

public int getSubStringCount(String str,String key)
{
   int count =0;
   int index =0;
   int length = key.length();
   while(str.indexOf(key,index)!=-1)
    {
     index += length;
     count ++;
    }
 return  count;
}
           

4  获取2个字符串中最大相同子串

public  String getMaxSubString(String str1,String str2)
{ 

   String  max ="";
   String  min ="";
    max = str1.length()>str2.length()?str1:str2;
    min = max.length()>str1.lenght()?str1:str2;
    String temp = "";
   for(int x=0;x<min.length();x++)//必须保证str2是长度小的那个字符串以便减少循环次数
    {
      for(int a=0,b=min.length()-a;b!= min.length()+1;a++,b++)
       {
           temp = min.subString(a,b);
           if(max.indexOf(temp)!=1)
           {
                return temp;
           }
       }
    }
  return null;
}
           

StringBuffer:字符串缓冲器

     1 StringBuffer 是一个容器

       特点:

       1 长度可变

       2 可直接操作多个数据类型

       3 最终通过toString方法变成字符串;

       1 存储

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

         StringBuffer insert(int offset,参数);

         :这里的参数可以使出了byte  short类的任意数据类型

          可以将数据插入到offset位置

       2 删除

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

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

                 delete(0,sb.length());//清空字符串缓冲区

       3 获取

           char charAt(index);

           int  indexOf(String str);

           int  indexOf(String str,int fromIndex);

           int  lastIndexof(str);

           int  length();

           String  subString(start,end);

       4 修改

 *        StringBuffer replace(start,end,str);

 *        void setCharAt(index,char);替换某角标字符

 *        

 *     5 StringBuffer reverse();

StringBuilder :JDK1.5之后可使用

StringBuffer  是线程同步的

StringBuilder 是线程不同步的

单线程StringBuffer效率低

以后开发建议使用StringBuilder线程安全问题自己处理

java的升级:1 提高效率 2 简化书写  3 提高安全性