您的位置:首页 > 职场人生

黑马程序员_String类

2014-03-28 07:00 260 查看
-------
android培训、java培训、期待与您交流! ----------
 
一.概述
    String类用于描述字符串事物。
    字符串是常量,它们的值在创建之后不能改变。
    字符串常量存在于常量池中。(方法区)
    字符串是一个特殊的对象。
    字符串缓冲区支持可变的字符串。
    String str = “abc”;//str是类类型变量,“abc”是一个对象
    String str1 = new String(“abc”);//str1在内存中有两个对象 
二.常见方法
    1.获取
         字符串中的包含的字符数,也就是字符长度。
               int    length();
         根据位置获取位置上的某个字符。
              char  charAt(int index);
         根据字符获取该字符在字符串中的位置。
              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.判断
    
字符串中是否包含某一个子串。
       boolean   contains(str);
       特殊之处:indexOf(str);可以索引str第一次出现的位置,如果返回-1,表示该str在字符串中不存在。
       所以可以用于对指定字符串判断是否包含。
       if(str.indexOf(“aa”)!=-1){    } 
    字符串中是否有内容。
       boolean  isEmpty();//原理:判断长度是否为0。
     字符串是否以指定的内容开头。
       boolean  startWith(str);
     字符串是否以指定的内容开头。
       boolean  endWith(str);
     判断字符串内容是否相同,复写了Object类中的equals()方法。
       boolean   equals(str);
     判断内容是否相同,并忽略大小写。(将参与比较的字符串全变成小写,再用equals比较)
       boolean   equalsIgnoreCase();
  3.转换
     将字符数组转换成字符串。
     构造函数:
         String(char[] );
       String(char[],offset,count);//将字符数组中的一部分转换成字符串。
     静态方法:
     //返回指定数组中表示该字符序列的 String。
        static String copyValueOf(char[]);
     //返回指定数组中表示该字符序列的 String。可以设置起点和数量。
        static String copyValueOf(char[],data,int offset,int count);
    //返回 char数组参数的字符串表示形式。
        static String valueOf(char[]);
    
    将字符串转成字符数组。
      char[]    toCharArray();
    将字节数组转换成字符串。
         String(byte[] );
       String(byte[],offset,count);//将字节数组中的一部分转换成字符串。
    将字符串转换成字节数组。
       byte[]  getBytes();
    将基本数据类型转换成字符串。
       static  String  valueOf(int x);//
返回 int 参数的字符串表示形式。
       static  String  valueOf(double d);//
返回double参数的字符串表示形式。
       static  String  valueOf(long l); //返回long参数的字符串表示形式。
       static  String  valueOf(long l); //返回long参数的字符串表示形式。
       static  String  valueOf(Object obj);//返回 Object参数的字符串表示式。
    注意:
        字符串和字节数组在转换过程中,可以指定编码表。    
     4.替换
             String replace(char oldChar, char newChar);
     5.切割
            String[]   split(regex);
     6.子串:获取字符串中的一部分。
            String  subString(int  
beginIndex); //返回一个新的字符串,它是此字符串的一个子字符串。从起始位置到结尾。
           String  substring(int beginIndex, int endIndex);//
返回一个新的字符串,它是此字符串的一个子字符串。包含头,不包含结尾。
     7.转换,去除空格,比较
           将字符串转成大写和小写。
               String  toUpperCase();  //转成大写
               String  toLowerCase();   //转成小写
           将字符串两端的空格去除。
               String  trim();
           对两个字符串进行自然顺序的比较
               int   compareTo();
  代码: 
/*练习1.模拟一个trim方法,去除字符串两端的空格。
*  思路:
*1.判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。
*结尾处判断空格也是如此。
*2.当开始和结尾都判断到不是空格时,就是要获取的字符串。
**/

class StringTest {
public static void main(String[] args) {
String s = "    ab cf    ";
sop("(" + s + ")");
// String r= myTrim(s);
s = myTrim(s); // 调用方法 参数传递
sop(s);
sop("(" + s + ")");

sop("(" + reserveString(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); // substring()方法包含头,不含尾
}

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

    练习2,获取一个字符串在另一个字符串中出现的次数。
             "abkkcdkkefkkskk"
      思路:
          定义个计数器。
         获取kk第一次出现的位置。
        从第一次出现位置后剩余的字符串中继续获取kk出现的位置。每获取一次就计数一次。
        当获取不到时,计数完成。
   代码:
public class StringTest2 {
//方式1
public static int getSubCount(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 sop(String str)
{
System.out.println(str);
}
//方式2
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="abckkdefkkfgkk";
//方法调用并打印结果
sop("count="+getSubCount(str, "kk"));
sop("count="+getSubCount_2(str, "kk"));

}
}

三.StringBuffer 
   字符串缓冲区,是一个容器。
  1.特点:
    长度是可变化的。
    可以操作多个数据类型。
    最终会通过toString方法变成字符串。
  2.常见方法  
    存储
      StringBuffer   append();//将指定的数据作为参数添加到已有数据的结尾处。
      StringBuffer insert(offset,data);//将数据插入到指定的位置。
   删除
     StringBuffer delete(start,end);//删除缓冲区中的数据,包含头,不包含尾。
     StringBuffer delete(index);//删除指定位置的字符。
      delete(0,sb.length());//清空缓冲区。
   获取
     char charAt(int index) 
      int indexOf(String str) 
      int lastIndexOf(String str) 
      int length() 
      String substring(int start, int end)
  修改
    StringBuffer   replace(start,end,str);//
使用给定 String中的字符替换此序列的子字符串中的字符。
    void  setCharAt(int index, char ch) ;//将给定索引处的字符设置为 ch。
  反转
       StringBuffer  reverse();//将此字符序列用其反转形式取代。
  将缓冲区中指定的数据存储到指定字符数组中。
   //将字符从此序列复制到目标字符数组 dst。

       void  getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);
   在jdk1.5之后,出现了StringBuilder:
     StringBuilder:线程不同步。(建议使用)
      StringBuffer:线程同步。
  java升级的三个要素:
     提高效率。
      简化书写。
     提高安全性。
  代码:  
class StringBufferDemo
{
public static void main(String[] args)
{

StringBuilder sb = new StringBuilder("abcdef");

char[] chs = new char[6];

sb.getChars(1,4,chs,1);

for(int x=0; x<chs.length; x++)
{
sop("chs["+x+"]="+chs[x]+";");
}
draw(3,6);
draw(8,9);
}
public static void method_update()
{
StringBuffer sb  = new StringBuffer("abcde");
sb.setCharAt(2,'k');
sop(sb.toString());
}
public static void method_del()
{
StringBuffer sb  = new StringBuffer("abcde");
sb.deleteCharAt(2);
sop(sb.toString());
}
public static void method_add()
{
StringBuffer sb = new StringBuffer();
sb.insert(1,"qq");
sop(sb.toString());//abctrue34
}
public static void sop(String str)
{
System.out.println(str);
}

public static void draw(int row,int col)
{
StringBuilder sb = new StringBuilder();
for(int x=0; x<row; x++)
{
for(int y=0; y<col; y++)
{
sb.append("*");
}
sb.append("\r\n");
}

sop(sb.toString());
}
}

四.基本数据类型包装类
    将基本数据类型封装成对象。
   1.好处:可以在对象中定义更多的功能方法操作该数据。 
    基本数据类型   包装类
      byte       Byte
    short       Short
    int         Integer
    long        Long
    boolean     Boolean
    float        float
    double     Double
     char       Charater
  2.最常见作用:
     a.用于基本数据类型和字符串之间的转换。
     b.基本数据类型转换为字符串:
         基本数据类型+” ”
         基本数据类型. toString(基本数据类型值);
        举例:Integer.toString(34);//将整数34变成“34”;
    c.字符串转换成基本数据类型:
       格式:xxx a=Xxx.parseXxx(string);
            int a=Integer.parseInt(“12”);
       对象调用:
         Integer i=new Integer(“12”);
       int num=i.intValue();
    d.十进制转为其它进制
       toBinaryString();   //十进制转为二进制
        toHexString();     //十进制转为十六进制
        toOctalString();     //十进制转为八进制
      其它进制转为十进制
       parseInt(string,int radix);
      举例:
          int x=Integer.parseInt(“110”,2);//6
    e.整数类型的最大值:
         Integer.MAX_VALUE;
    
 
 
-------
android培训、java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java