Java私塾跟我学系列――JAVA篇 第六章 常见类的使用 二、

 

二、String                                                 

1.String的直接量(或称为字面量)                                                                  

双引号括起来的字符序列就是String的直接量。实例: “John” 或 "111222333"

字符串赋值,可以在声明时赋值

String color = "blue";

color 是String类型的引用。

“blue” 是String直接量。 

String直接量是存放在栈内存里,所以一旦定义就不能改变值了,只能是让变量指向新的内存空间。比如:

color = “red”; 

如果采用new的方法定义String,那么是需要分配堆内存空间的,如下:

String str = new String(“Hello”);

一共有两个对象,在栈和堆内存中各有一个对象,内容都是“Hello”。 

2.String的常用方法                                                               

2.1 String方法:length(),charAt(),getBytes()和 getChars()

方法 length()

–返回 String 的长度,是按照char返回的长度

–与数组不同之处: String类不含有 length成员域(属性)

方法charAt(int index)

–获得字符串指定位置的字符

方法getBytes()

–使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中

方法getChars(int srcBegin, int srcEnd,

               char[ ] dst, int dstBegin)

–拷贝字符串的部分字符序列到指定的字符数组的指定位置

注意:对于字符串中的汉字,是按照char来计算的,一个中文汉字占两个字节,也就是说,通过length()得到的是字符串char的长度,而不是字节数,利用这个特点,就可以进行中文判断了。

例如:如何判断一个字符串里面有没有中文呢?如果字符串对应的byte[]和char[]的长度是不一样的,那就说明包含中文,其实还可以顺带计算出有几个汉字。

publicclass Test{  

    publicstaticvoid main(String[] args) {

       String str = "这里是Java私塾";

       int charLen = str.length();

       int byteLen = str.getBytes().length;

       if(byteLen > charLen){

           int chineseNum = byteLen - charLen;

           System.out.println("str包含汉字,汉字共"+chineseNum+"个");

       }else{

           System.out.println("str没有包含汉字");

       }

    }

}

运行结果是:

str包含汉字,汉字共5个

2.2字符串比较 

       –字符类型的数据也是数值类型数据

–比较字符串大小,实际上就是依次比较其所包含的字符的数值大小

–小写字母与大小字母是不相同的,Java是区分大小写 

方法compareTo(String s)

比较两个字符串的大小。返回0表示相等,返回大于0的数表示前面的字符串大于后面的字符串,返回小于0表示前面的字符串小于后面的字符串,区分大小写的。如下:

public class Test{  

       public static void main(String[] args) {

              String str = "这里是JAVA私塾";

              String str2 = "这里是java私塾";

              if(str.compareTo(str2)==0){

                     System.out.println("the str 等于 str2");

              }else if(str.compareTo(str2) > 0){

                     System.out.println("the str 大于 str2");

              }else if(str.compareTo(str2) < 0){

                     System.out.println("the str 小于 str2");

              }

       }

}

运行结果:the str 小于 str2 

方法compareToIgnoreCase(String s):忽略大小写,比较两个字符串的大小。返回0表示相等,返回大于0的数表示前面的字符串大于后面的字符串,返回小于0表示前面的字符串小于后面的字符串。如下:

public class Test{  

       public static void main(String[] args) {

              String str = "这里是JAVA私塾";

              String str2 = "这里是java私塾";

              if(str.compareToIgnoreCase(str2)==0){

                     System.out.println("the str 等于 str2");

              }else if(str.compareToIgnoreCase(str2) > 0){

                     System.out.println("the str 大于 str2");

              }else if(str.compareToIgnoreCase(str2) < 0){

                     System.out.println("the str 小于 str2");

              }

       }

}

运行结果:the str 等于 str2 

方法equals(Object s):比较两个String对象的值是否相等,这个是区分大小写的

方法equalsIgnoreCase(String  s):比较两个String对象的值是否相等,忽略大小写

     String的比较要使用equals()方法,不能使用”==” 

2.3查找字符串中的字符或子串

    查找字符串(String)中的字符或子串

方法indexOf

四种重载方法 indexOf()

返回第一次找到时的起始下标

如果没有找到,则返回-1

。实例:

String name = "CoolTools";

System.out.println (name.indexOf("oo"));

方法 lastIndexOf

–public int lastIndexOf(int ch, int fromIndex)

–从指定位置往回查找,返回找到的最大的字符下标位置

–即返回满足下面条件的最大值:

(this.charAt(k) == ch) && (k <= fromIndex)

–返回-1: 如果当前字符串不含该字符

方法startsWith(Stirng prefix):测试此字符串是否以指定的前缀开始,如下:

public class Test{ 

    public static void main(String[] args) {

        String str = "这里是Java私塾";

        String str2 = "Java";       

        System.out.println(str.startsWith(str2));

    }

}

运行结果:false

方法startsWith(String prefix,int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

public class Test{ 

    public static void main(String[] args) {

        String str = "这里是Java私塾";

        String str2 = "Java";       

        System.out.println(str.startsWith(str2,3));

    }

}

运行结果:true

方法endsWith(String suffix):测试此字符串是否以指定的后缀结束 

2.4从当前字符串中抽取子字符串 

方法 substring

–substring(int beginIndex)

返回新的字符串: 当前字符串的子串

该子串从指定的位置开始,并一直到当前字符串结束为止

–substring(int beginIndex, int endIndex)

返回新的字符串: 当前字符串的子串

该子串从指定的位置(beginIndex )开始, 到指定的位置(endIndex - 1)结束 

       例如:

            “unhappy”.substring(2) 返回      "happy"

“Harbison“.substring(3)返回      "bison"

“emptiness”.substring(9)返回     "" (空串)

“emptiness“.substring(10)返回     StringIndexOutOfBoundsException 

“hamburger“.substring(4, 8)返回  "urge" 

“smiles“.substring(1, 5)返回  "mile" 

2.5字符串拼接

方法 concat

–拼接两个字符串,并返回一个新字符串

–源字符串不会被修改

–s1.concat( s2 )

返回字符串s1和s2拼接的结果

实例:

String s1 = "ABC";

String s2 = "XYZ";

s1 = s1.concat(s2);  // 等同于 s1 = s1 + s2; 

2.6类String的成员方法valueOf 

      静态(static)成员方法valueOf

–将参数的值转化成相应的字符串

–valueOf(char[] data)

返回 new String(data);

–valueOf(char[] data, int offset, int count)

返回 new String(data, offset, count);

–其它valueOf方法的参数的类型: boolean、char、int、long、float、double和Object

对象还可以通过方法toString转化成字符串 

2.7字符串分解 

方法split(String regex)

          根据给定正则表达式的匹配拆分此字符串,得到拆分好的字符串数组,示例如下:

public class Test{ 

    public static void main(String[] args) {

        String str = "这里,是Java,私塾";

        String tempS[] = str.split(",");//按照“,”对字符串进行拆分

        for(int i=0;i<tempS.length;i++){

            System.out.println("tempS["+i+"]==="+tempS[i]);

        }      

    }

}

运行结果:

tempS[0]===这里

tempS[1]===是Java

tempS[2]===私塾

注意

(1)如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");

publicclass Test{

    publicstaticvoid main(String[] args) {

       String str = "这里.是Java.私塾";

       String tempS[] = str.split("\\.");//按照"."对字符串进行拆分

       for(int i=0;i<tempS.length;i++){

           System.out.println("tempS["+i+"]==="+tempS[i]);

       }     

    }

}

(2)如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");

因为“.”和“|”都是转义字符,必须得加"\\";

publicclass Test{

    publicstaticvoid main(String[] args) {

       String str = "这里|是Java|私塾";

       String tempS[] = str.split("\\|");//按照"|"对字符串进行拆分

       for(int i=0;i<tempS.length;i++){

           System.out.println("tempS["+i+"]==="+tempS[i]);

       }     

    }

StringTokenizer

与String的split方法功能类似,也是用来分解字符串,StringTokenizer 是出于兼容性的原因而被保留的遗留类(在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。所以这里就不多说了。

2.8其它String方法 

方法replace( char1, char2 )

–返回一个新的字符串,它是将s1中的所有char1替换成的结果char2

–源字符串没有发生变化

–如果s1不含char1, 则返回源字符串的引用,即s1

实例:

–“mesquite in your cellar”.replace(‘e’, ‘o’) 结果返回 "mosquito in your collar"

–“JonL”.replace(‘q’, ‘x’)结果返回“JonL” (没有发生变化)

方法toUpperCase

–返回对应的新字符串,所有小写字母都变为大写的,其它的不变

–如果没有字符被修改,则返回源字符串的引用

–类似方法s1.toLowerCase (所有大写字母都变为小写字母)

方法trim( )

–返回新字符串,截去了源字符串最前面和最后面的的空白符

–如果字符串没有被改变,则返回源字符串的引用

方法toString( )

–由于s1本身就是字符串了,所以返回s1本身

–其它引用类型也可以通过方法toString,生成相应的字符串 

方法toCharArray( )

–将字符串转换成字符数组

方法

intern

–返回具有相同内容的字符串的引用

–如果字符串池含有该内容的字符串,则返回字符串池中具有该内容的字符串的引用

–如果字符串池没有字符串的内容与其相同,则在字符串池中创建具有该内容的字符串,再返回新创建的字符串的引用

字符串池   

–组成: 字符串直接量  以及  由方法intern产生的字符串

–字符串池中的字符串s与t : s与t具有相同内容(s.equals(t))当且仅当指向s与t的同一个字符串(s.intern() == t.intern())

–可以采用这个机制加速字符串是否相等的判定。

Java私塾跟我学系列——JAVA  网址:http://www.javass.cn  电话:010-68434236

你可能感兴趣的:(java,职场,休闲)