xscn

博客园 首页 新随笔 联系 订阅 管理

 

String类

String类是对字符串事物的描述,该类定义了专门用于操作字符串的方法。被final修饰,意味不能有子类。

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

例如:String s = new String(“abc”);String s1 = “abc”;构造内容一样,后者更常用。s1是一个类类型变量,字符串”abc”是对象。不一定非要有new才是对象。只要是双引号内的内容,都是String类的对象。
字符串一旦被初始化,就不可以被改变(属性)。变量s1可以变化,可以指向其他对象,但是对象”abc”不会变化。

String类复写了Object类中的equals方法,用于判断字符串内容是否相同,而不是以前的判断内存地址值是否一致。

 1 class StringDemo 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String s1 = "abc";//s1是一个类类型变量, "abc"是一个对象。
 6         String s2 = new String("abc");
 7                 //s1和s2有什么区别?
 8         //s1在内存中有一个对象。
 9         //s2在内存中有两个对象。
10         System.out.println(s1==s2);//比较地址值,false
11         System.out.println(s1.equals(s2));//复写了equals方法用来比较字符串内容是否相同,true       
12     }
13 }

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) :反向索引,返回指定字符在此字符串中最后一次出现处的位置。
        int lastIndexOf(int ch, int fromIndex)
        int lastIndexOf(String str)
        int lastIndexOf(String str, int fromIndex)

 

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String s1 = "cabfhabf";
 6         sop(s1.length());//返回字符串长度-----8
 7         sop(s1.charAt(3));//返回角标为3的字符---f
 8         sop(s1.indexOf('f'));//返回f第一次出现的位置-----3
 9         sop(s1.indexOf('f',4));//从角标4开始返回f第一次出现的位置-----7
10         sop(s1.indexOf("ab"));//返回字符串"ab"第一次出现的位置--------1
11         sop(s1.indexOf("ab",4));//从角标4开始返回字符串"ab"第一次出现的位置-------5
12         
13         //反向索引
14         sop(s1.lastIndexOf('f'));
15         sop(s1.lastIndexOf('f',4));
16         sop(s1.lastIndexOf("ab"));
17         sop(s1.lastIndexOf("ab",4));
18 
19     }        
20     public static void sop(Object obj)
21     {
22         System.out.println(obj);
23     }
24     
25 }
26         

 

2,判断。
    2.1 字符串中是否包含某一个子串。
        boolean contains(str):
        比较:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。该方法既可以判断,也可以获取出现的位置。

    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();

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String str  = "ArrayDemo.java";
 6         String str1 = "arraydemo.java";
 7         //判断字符串中是否有内容
 8         sop(str.isEmpty());
 9         //判断文件名称是否是Array单词开头。
10         sop(str.startsWith("Array"));
11         //判断文件名称是否是.java的文件。
12         sop(str.endsWith(".java"));
13         //判断文件名中是否包含Demo
14         sop(str.contains("Demo"));//不要用contains判断文件类型,比如hehe.java.txt
15 
16         //将此String与另一个String比较,不考虑大小写。常用于登陆时用户名校验。
17         sop(str.equalsIgnoreCase(str1));
18     }        
19     public static void sop(Object obj)
20     {
21         System.out.println(obj);
22     }
23     
24 }
25         

3,转换。
    3.1 将字符数组转成字符串。
        构造函数:String(char[] ch)
                      String(char[], int offset, int count):将字符数组中的一部分转成字符串。offset为起始角标,count为字符个数。

        静态方法:
                static String copyValueOf(char[]);
                static String copyValueOf(char[] data, int offset, int count)

                static String valueOf(char c):

        
    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)

        //3+"";//String.valueOf(3);
       特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         //将字符数组转成字符串,通过构造函数。
 6         char[] arr = {'h','e','l','l','o','j','a','v','a'};
 7         String str =new String(arr);
 8         sop("str="+str);
 9         String str1 =new String(arr,5,4);
10         sop("str1="+str1);
11         //通过静态方法。
12         sop(String.copyValueOf(arr));
13         sop(String.copyValueOf(arr,5,4));
14         
15         sop(String.valueOf('x'));//单个字符转换成字符串
16         sop(String.valueOf(3.14159));//基本数据类型(单个)转换成字符串
17 
18         //将字符串转成字符数组。
19         char[] arr1 = str.toCharArray();
20         for(int x=0; x<arr1.length; x++)
21         {
22             sop("arr["+x+"]="+arr1[x]);
23         }
24     }        
25     public static void sop(Object obj)
26     {
27         System.out.println(obj);
28     }
29     
30 }
31 ---------- java ----------
32 str=hellojava
33 str1=java
34 hellojava
35 java
36 x
37 3.14159
38 arr[0]=h
39 arr[1]=e
40 arr[2]=l
41 arr[3]=l
42 arr[4]=o
43 arr[5]=j
44 arr[6]=a
45 arr[7]=v
46 arr[8]=a
47 
48 输出完成 (耗时 0 秒) - 正常终止     

4,替换
    String replace(oldchar,newchar);

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String s = "hello java";
 6 
 7         String s1 = s.replace('a','n');//如果要替换的字符不存在,返回的还是原串。
 8         
 9         String s2 = s.replace("java","world");
10         
11         sop("s="+s);
12         sop("s1="+s1);
13         sop("s2="+s2);
14         
15     }        
16     public static void sop(Object obj)
17     {
18         System.out.println(obj);
19     }
20     
21 }
22 ---------- java ----------
23 s=hello java
24 s1=hello jnvn
25 s2=hello world
26 
27 输出完成 (耗时 0 秒) - 正常终止

 

5,切割
    String[]  split(regex);

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String s = "zhagnsa,lisi,wangwu";
 6 
 7         String[] arr  = s.split(",");
 8 
 9         for(int x = 0; x<arr.length; x++)
10         {
11             sop("arr["+x+"]="+arr[x]);
12         }
13         
14     }        
15     public static void sop(Object obj)
16     {
17         System.out.println(obj);
18     }
19     
20 }
21 ---------- java ----------
22 arr[0]=zhagnsa
23 arr[1]=lisi
24 arr[2]=wangwu
25 
26 输出完成 (耗时 0 秒) - 正常终止

 

6,子串。获取字符串中的一部分。
    String substring(begin);
    String substring(begin,end);

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5         String s = "abcdef";
 6 
 7         sop(s.substring(2));//从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。
 8         sop(s.substring(2,4));//包含头,不包含尾。s.substring(0,s.length())
 9         sop(s.substring(0,s.length()));
10         
11     }    
12     public static void sop(Object obj)
13     {
14         System.out.println(obj);
15     }
16     
17 }
18 ---------- java ----------
19 cdef
20 cd
21 abcdef
22 
23 输出完成 (耗时 0 秒) - 正常终止

 7,转换,去除空格,比较。
    7.1 将字符串转成大写或则小写。
         String toUpperCase();
         String toLowerCase();

    7.2 将字符串两端的多个空格去除。
        String trim();

    7.3 对两个字符串进行自然顺序的比较。
        int compareTo(string);
        int compareToIgnoreCase(string);

 

 1 class StringFunctionDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5         String s = "    Hello Java     ";
 6         sop(s.toLowerCase());
 7         sop(s.toUpperCase());
 8         sop(s.trim());
 9 
10         String s1 = "a1c";
11         String s2 = "aaa";
12 
13         sop(s1.compareTo(s2));
14         
15     }    
16     public static void sop(Object obj)
17     {
18         System.out.println(obj);
19     }
20 }
21 ---------- java ----------
22     hello java     
23     HELLO JAVA     
24 Hello Java
25 -48
26 
27 输出完成 (耗时 0 秒) - 正常终止

 

StringBuffer类

StringBuffer是字符串缓冲区。
是一个容器。
特点:
1,长度是可变化的。
2,可以字节操作多个数据类型。
3,最终会通过toString方法变成字符串。

字符串的组成原理就是通过该类实现的。
StringBuffer可以对字符串内容进行增删。

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

 1 class StringBufferDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5         StringBuffer sb = new StringBuffer();
 6 
 7         sb.append("hello").append("java").insert(5,',');
 8         sop(sb.toString());
 9         
10     }    
11     public static void sop(Object obj)
12     {
13         System.out.println(obj);
14     }
15 }
16 ---------- java ----------
17 hello,java
18 
19 输出完成 (耗时 0 秒) - 正常终止

 

2,删除。
    StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
    StringBuffer deleteCharAt(index):删除指定位置的字符。

 1 class StringBufferDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5     StringBuffer sb= new StringBuffer("hello,java");
 6     sb.delete(0,5);//删除缓冲区中的数据,包含start,不包含end。
 7     //sb.delete(1,1);//指定位置一样,不会删除
 8     //sb.deleteCharAt(5);//删除指定位置的字符。
 9     //sb.delete(0,sb.length());//清空缓冲区。
10     sop(sb.toString());
11 
12     }    
13     public static void sop(Object obj)
14     {
15         System.out.println(obj);
16     }
17 }

 

3,获取。
    char charAt(int index)
    int indexOf(String str)
    int lastIndexOf(String str)
    int length()
    String substring(int start, int end)

 1 class StringBufferDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5     StringBuffer sb= new StringBuffer("hello,java");
 6     
 7     sop(sb.charAt(1));
 8     sop(sb.indexOf("l"));
 9     sop(sb.lastIndexOf("l"));
10     sop(sb.length());
11     sop(sb.substring(0,5));
12     
13     }    
14     public static void sop(Object obj)
15     {
16         System.out.println(obj);
17     }
18 }
19 ---------- java ----------
20 e
21 2
22 3
23 10
24 hello
25 
26 输出完成 (耗时 0 秒) - 正常终止

 4,修改。
    StringBuffer replace(start,end,string);
    void setCharAt(int index, char ch) ;

 1 class StringBufferDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5     StringBuffer sb= new StringBuffer("hello,java");
 6     
 7     sop(sb.replace(0,5,"haha"));
 8     sb.setCharAt(4,'+') ;
 9     sop(sb.toString());
10     
11     }    
12     public static void sop(Object obj)
13     {
14         System.out.println(obj);
15     }
16 }
17 ---------- java ----------
18 haha,java
19 haha+java
20 
21 输出完成 (耗时 0 秒) - 正常终止

 5,反转。
    StringBuffer reverse();

 1 class StringBufferDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5     
 6     StringBuffer sb= new StringBuffer("hello,java");
 7     sop(sb.reverse());
 8     
 9     }    
10     public static void sop(Object obj)
11     {
12         System.out.println(obj);
13     }
14 }
15 ---------- java ----------
16 avaj,olleh
17 
18 输出完成 (耗时 0 秒) - 正常终止

6,
    将缓冲区中指定数据存储到指定字符数组中。
    void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

 1 class StringBufferDemo 
 2 {
 3     public static void main(String[] args) 
 4     {   
 5     
 6         StringBuilder sb = new StringBuilder("abcdef");
 7     
 8         char[] chs = new char[6];
 9         //将缓冲区中指定数据存储到指定字符数组中。
10         sb.getChars(1,4,chs,1);
11 
12         for(int x=0; x<chs.length; x++)
13         {
14             sop("chs["+x+"]="+chs[x]+";");
15         }
16     }    
17     public static void sop(Object obj)
18     {
19         System.out.println(obj);
20     }
21 }
22 ---------- java ----------
23 chs[0]= ;
24 chs[1]=b;
25 chs[2]=c;
26 chs[3]=d;
27 chs[4]= ;
28 chs[5]= ;
29 输出完成 (耗时 0 秒)

 

JDK1.5 版本之后出现了StringBuilder.
StringBuffer是线程同步。
StringBuilder是线程不同步。
开发建议使用StringBuilder.

基本数据类型对象包装类

将基本数据类型封装成对象的好处在于可以在 对象中定义更多的功能方法操作该数据。

byte       Byte
short      Short
int          Integer
long        Long
boolean   Boolean
float        Float
double    Double
char       Character

基本数据类型转成字符串。

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

字符串转成基本数据类型。

    xxx a = Xxx.parseXxx(String);
    //静态转换方法
    int a = Integer.parseInt("123");

    double b = Double.parseDouble("12.23");

    boolean b = Boolean.parseBoolean("true");

    //动态方法,对象调用

    Integer i = new Integer("123");

    int num = i.intValue();

十进制转成其他进制

         toBinaryString();转二进制

         toOctalString();转八进制

         toHexString();转十六进制                                      

其他进制转成十进制

         static int parseInt(String s, int index);第二个参数代表进制,将某个进制的某个字符串转成十进制的基本数据。例如Integer.parseInt("110",2);将二进制的110转成十进制。

基本数据类型对象包装类新特性 

JDK1.5以后,简化了定义方式。
•Integer x = new Integer(4);可以直接写成
•Integer x = 4;//自动装箱。
•x = x + 5;//自动拆箱。通过intValue方法。

需要注意:
•在使用时,Integer x = null;上面的代码就会出现NullPointerException。

 

Integer m = 128;
Integer n = 128;

sop("m==n:"+(m==n));////结果为flase.

Integer a = 127;
Integer b = 127;

sop("a==b:"+(a==b));//结果为true。

当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新的空间。

int compareTo(Integer anotherInteger)比较对象内的数值大小。小于返回-1;等于返回0;大于返回1。

 

posted on 2013-07-28 22:28  xscn  阅读(246)  评论(0编辑  收藏  举报