String

来源:互联网 发布:去泰山捡石头必知 编辑:程序博客网 时间:2024/06/03 15:18

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

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

String s1 = “abc”;//s1是一个类类型变量
String s2 = new String(“abc”);
s1和s2有什么区别:
第一句执行在内存中产生一个对象。
第二句执行在内存中产生两个对象。new产生了一个对象,字符串"abc"是一个对象。
System.out.println(s1==s2); //输出 false
System.out.println(s1.equals(s2)); //输出true   String类复写了Object类中的equals方法,该方法用于判断字符串中的内容是否相同。

String常见功能
String类用于描述字符串事物。
那么它就提供了多个方法对字符串进行操作。
常见的操作有哪些?
1,获取
String str = "eabcdeabkpf"

1.1   获取字符串中包含的字符数,也就是字符串的长度。
int length():
示例:sop(str.length()); //打印结果:11 注意:String中的获取长度是方法,而数组中的获取长度是属性:arr.length

1.2   根据位置获取位置上某个字符。
char charAt(int index):
示例:sop(str.charAt(4));  //打印结果:d
当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException(字符串角标越界异常)。
示例:sop(str.charAt(20)); //显示结果是StringIndexOutOfBoundsException
1.3.1 根据字符获取该字符在字符串中位置。如果没有找到返回-1
int indexOf(int ch):返回的是ch(该字符)在字符串中第一次出现的位置。
示例:sop(str.indexOf('a'));//打印结果:1
int indexOf(int ch, int fromIndex):从fromIndex指定位置开始索引,获取ch(该字符)在字符串中出现的位置。
示例:sop(str.indexOf('a',3));//打印结果:6
示例:sop(str.indexOf('m',3));//打印结果:-1

1.3.2根据字符串获取该字符串在字符串中位置。如果没有找到返回-1
int indexOf(String str):返回的是str(该字符串)在字符串中第一次出现的位置。
示例:sop(str.indexOf("ea"));//打印结果:0
int indexOf(String str, int fromIndex):从fromIndex指定位置开始索引,获取str(该字符串)在字符串中出现的位置。
示例:sop(str.indexOf("ab",0)); 1
           sop(str.indexOf("ab",1)); 1
           sop(str.indexOf("ab",3)); 6

lastIndexOf反向搜索
int lastIndexOf(int ch) :返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex):返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
2,判断
2.1 字符串中是否包含某一个子串。
boolean contains(str):当且仅当此字符串包含指定的子串时,返回 true。
特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在。
  所以,也可以用于对指定字符串判断是否包含。
                  比如: if(str.indexOf("aa")!=-1)
  而且该方法即可以判断,又可以获取该子串出现的位置。
2.2 字符中是否有内容。
boolean isEmpty(): 当且仅当 length() 为 0 时返回 true。
原理就是判断长度是否为0. 
2.3 字符串是否是以指定内容开头。
boolean startsWith(str);
2.4 字符串是否是以指定内容结尾。
boolean endsWith(str);
2.5 判断字符串内容是否相同。复写了Object类中的equals方法。不忽略大小写。
boolean equals(str);
2.6 判断内容是否相同,并忽略大小写。
boolean equalsIgnoreCase();将此 String 与另一个 String 比较,不考虑大小写
示例:
String str = "ArrayDemo.java";
//判断文件名称是否是Array单词开头。
sop(str.startsWith("Array"));
//判断文件名称是否是.java的文件。
sop(str.endsWith(".java"));
//判断文件中是否包含Demo
sop(str.contains("Demo"));

3,转换
3.1 将字符串转成字符数组。**
char[] toCharArray():
      将字符串转成字节数组。
byte[] getBytes():

3.2 将字符数组转成字符串。
      构造方法:new String(char[]):将字符数组中的全部转成字符串。
     示例:char[] arr = {'a','b','c','d','e','f'};
        String s= new String(arr);
        sop("s="+s);//打印结果:s=abcdef

                       new String(char[],offset(起始位置),count(代表个数)):将字符数组中的一部分转成字符串。
     示例:char[] arr = {'a','b','c','d','e','f'};
        String s= new String(arr,1,4);
        sop("s="+s);//打印结果:s=bcde
      静态方法:
        static String copyValueOf(char[] date);返回指定数组中表示该字符序列的 String。
        static String copyValueOf(char[] data, int offset, int count);返回指定数组中表示该字符序列String。
        static String valueOf(char[] date):返回 char 数组参数的字符串表示形式。

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

     将基本数据类型转成字符串。
               static String valueOf(int)
               static String valueOf(double)
              //3+"";和String.valueOf(3); 的运算结果一样,
     特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

4,替换
String replace(oldchar,newchar);
示例:
替换字符
String s = "hello java";
String s1 = s.replace('a','n');
sop("s="+s); //打印结果:hello java,字符串初始化后不会被改变
sop("s1="+s1);//打印结果:hello jnvn
String s1 = s.replace('q','n'); //打印结果:hello java,如果要替换的字符不存在,返回的还是原串。
替换字符串
String s1 = s.replace("java","world");
sop("s="+s); //打印结果:hello java
sop("s1="+s1);//打印结果:hello world
5,切割
String[] split(regex);
示例:
        String s = "zhangsan,lisi,wangwu";
String[] arr  = s.split(",");
for(int x = 0; x<arr.length; x++)
{
sop(arr[x]); /*打印结果:zhangsan
      lisi
      wangwu  */
}
6,获取子串(获取字符串中的一部分)
String substring(begin index);从指定位置开始到结尾。如果角标不存在,会发生字符串角标越界异常。
也可以这样表示:s.sbustring(0,s.length())
String substring(begin index,end index);//包含头不包含尾。
示例:
String s ="abcdef"
sop(s.substring(2));//打印结果:cdef
sop(s.substring(2,4));//打印结果:cd
7,转换,去除空格,比较
7.1 将字符串转成大写或者小写。
 String toUpperCase();
 String toLowerCase();
7.2 将字符串两端的多个空格去除。
 String trim();
7.3 对两个字符串进行自然顺序的比较。
 int compareTo(string);
示例:
String s = "    Hello Java     ";
sop(s.toLowerCase());//打印结果:"    hello java     "
sop(s.toUpperCase());//打印结果:"    HELLO JAVA     "
sop(s.trim());//打印结果:"Hello Java"

String s1 = "a1c";
String s2 = "aaa";
sop(s1.compareTo(s2));//打印结果:-48

StringBuffer
StringBuffer是一个长度可变的容器,StringBuffer中的很多方法与String相同,字符串的组成原理就是通过该类实现的。
StringBuffer中封装了很多方法可以对字符串进行增删改查。
StringBuffer的特点:
1 长度可变
2 可以直接操作多种数据类型
3 对数据操作后会通过toString方法变成字符串。
1  存储
    StringBuffer append(): 将指定数据作为参数添加到已有数据的结尾处。
示例:
    StringBuffer sb = new StringBuffer();
    StringBuffer sb1 = sb.append(33);
    sop(sb==sb1);
   //输出true:append()方法返回的还是StringBuffer容器sb和sb1都指向了同一个对象,这就是缓冲区的特点。
    sb.append("abc").append(true).append(34);
   //输出 "abctrue34" 方法调用链:当一个方法被调用之后返回的还是本类对象,再调用本类方法,叫做方法调用链。
    StringBuffer insert(index,数据):将数据插入到指定index位置。

2  删除
    StringBuffer delete(start,end):  删除缓冲区中的数据,包含start,不包含end.
    StringBuffer deleteCharAt(index):删除指定位置的字符。
示例:
    StringBuffer sb = new StringBuffer("abcde");
    sb.delete(1,3);  //输出ade
    sb.deleteCharAt(2);  //输出abde 其实原理就是sb.delete(2,3);
    sb.delete(0,sb.length());  //清空缓冲区
    sop(sb.toString());

3  获取
    char charAt(int index):  根据角标获取字符
    int indexOf(String str):  根据字符串获取位置
    int lastIndexOf(String str):  根据字符串获取最后一次出现的位置
    String subString(int start, int end): 获取子串

4  修改
    StringBuffer replace(start ,end, String):   将指定位置的字符串按照指定的String进行修改,包含start,不包含end.
    void setCharAt(int index ,char ch ):   将指定位置的字符替换成ch
    示例:
    StringBuffer sb = new StringBuffer("abcde");
    sb.replace(1,4,"java"); //输出ajavae
    sb.setCharAt(2,'k'); //输出abkde
5  反转
    StringBuffer reverse():
6  将缓冲区中指定数据存储到指定字符数组中
    void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):
    示例:
    StringBuffer sb = new StringBuffer("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]+";");
    }

StringBuilder
JDK1.5版本之后出现了StringBuilder,StringBuilder是StringBuffer的简易替换。
StringBuffer 是线程同步的
StringBuilder 是线程不同步的

基本数据类型对象包装类
基本数据类型   对象包装类
byte                    Byte
short                   Short
long                    Long
boolean               Boolean
float                    Float
double                 Double
char                    Character
int                       Integer
基本数据类型对象包装类应用
基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。
基本数据类型转成字符串:
       基本数据类型 + " "  
       基本数据类型.toString(34); //将34整数转成“34”

字符串转成基本数据类型
        xxx a = Xxx.parseXxx(String);
示例:
        int a = Integer.parseInt("123");
        //必须传入对应格式的字符串,如果传入"a123"会发生NumberFormatException(数字格式异常)
        double d = Double.parseDouble("12.34");
        boolean b = Boolean.parseBoolean("true");

       非静态方法:intValue();
       Integer i = new Integer("123"); //先将字符串封装成对象,再通过intValue()方法转换成int类型
       int num = i.intValue();

十进制转成其他进制
        toBinaryString();
        toHexString();
        toOctalString();

其他进制转成十进制
       parseInt(String s, int redix);
示例:
       int x = Integer.parseInt("3c",16);//将字符串"3c"转成10进制是60
       System.out.println(x); //输出60
  
基本数据类型对象包装类新特性   
Integer x = new Integer("123");
Integer y = new Integer(123);
sop(x==y); // ==符号对于引用数据类型比较的是地址值,x和y指向了不同的对象,输出false.
sop(x.equals(y));  //Integer类复写了Object类的equals方法,形成了自己特有的方法,Integer类的equals方法比较的是数值是否相同,输出true.

JDK1.5版本以后出现的新特性
自动装箱与自动拆箱 
Integer x = new Integer(4);
Integer x = 4; //自动装箱操作,new Integer(4);
x = x /* x.intValue() */ + 2 ; //x进行了自动拆箱,变成int类型,和2进行加法运算,再将和进行装箱赋给x.

Integer m = 128;
Integer n = 128;
sop(n==m); //输出false
Integer a = 127;
Integer b = 127;
sop(a==b); //输出true 这里a和b指向了同一个Integer对象 ,当数值在byte范围内时,对于新特性,如果该数值已经存在,则不会开辟新的空间。