(57)String类操作:获取、判断、转换

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

String s=”abc”;《==》String s=new String(“abc”);
s是一个类类型变量,“abc”是一个对象。
不改变的是对象,而不是引用。
s1=”kk”;
这时打印s1是kk的原因是:对象的引用指向了kk对象,不再指向abc对象。abc对象在堆中还在。

二、String中的equals方法

public class StringDemo {

    public static void main(String[] args) {


        String s1="abc";
        String s2=new String("abc");
        String s3="abc";
        System.out.println(s1==s3);
        System.out.println(s1==s2);
        System.out.println(s1.equals(s2));  
    }

}

输出:false,true ,true
①s1==s2判断的是引用是否相同,明显是new了两个对象,所以引用不同为false。
if(s1==s3)为真
s1和s3都是常量,在方法区中有个常量池,常量就存在这里,s1、s3均为常量且值相等,就一份就可以了,所以s1,s3指向了同一个地方。
③在Object类中有equals方法,比较的是两个对象的引用,在String类中对equals方法进行复写。
在String中equals:将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
因为这两个对象的序列相同,所以equals为true。

s1和s2区别:
s1:在内存中有一个对象
s2:在内存中有两个对象
三、String类适用于描述字符串事物,那么它提供了多个方法对字符串进行操作。
1:获取
1.1字符串中包含的字符数,也就是字符串的长度。
public int length():返回字符串的长度。
在数组中也数组长度,但是它是通过属性length实现的,在字符串中是通过方法实现的。
1.2根据位置获取位置上的字符
public char charAt(int index)
1.3根据字符获取在该字符串中的位置
public int indexOf(int ch):返回的是ch在字符串中第一次出现的位置
public int indexOf(int ch,int fromIndex):从指定位置开始获取ch在字符串中的位置
public int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
public int lastIndexOf(int ch)也有从后往前找的方法

例子演示以上的函数功能
public class StringDemo {

    public static void sop(Object obj) {
        System.out.println(obj);
    }
    public static void method_get() {
        String str="abcdeaf";
        //获取长度
           sop(str.length());//7
        //获取位置上的特定字符
           sop(str.charAt(5));//a
           //sop(str.charAt(10));//下标越界:IndexOutOfBoundsException(运行时异常)
         //根据字符获取第一次出现的位置
           sop(str.indexOf('a'));//0
           sop(str.indexOf('n'));//字符不存在,返回-1
         //反向寻找特定字符在哪个位置
           sop(str.lastIndexOf('a'));//5


    }
    public static void main(String[] args) {

        method_get();

    }

}

method_get和sop用静态修饰原因是想调用简单。
因为这些String方法都要打印显示,将此封装成一个方法,让要字符串做什么的方法,调用这个输出方法即可。
打印有int、String类型,所以用Object,相当于装箱操作,小–>大

2判断
2.1字符串中是否包含某个子串
public boolean contains(CharSequence s)
【 CharSequence是个接口,String实现了这个接口,就可以用接口指向子类对象】
** 特殊之处:**indexOf(str)可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以contains方法也可以对指定判断子串是否包含。
if(str.index(“aa”)!=-1)而且该方法既可以判断,也可以获得位置
这两个方法如何选择:若只是判断是否有子串,则用contains
若既判断是否存在子串,以及要返回位置,则用indexOf(str)
2.2字符串中是否有内容
public boolean isEmpty():原理就是判断长度是否为0
2.3字符串是否是以指定内容开头
public boolean startsWith(String prefix)【注意参数是个字符串】
2.4字符串是否是以指定内容结尾
public boolean endsWith(String suffix)
2.5判断字符串内容是否相等,复写了Object类中的equals放法
boolean equals(str)
2.6判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase();

例子演示上述判断内容:

public class StringDemo {

    public static void sop(Object obj) {
        System.out.println(obj);
    }
    public static void method_is() {
        String str="ArrayDemo.java";
        //判断文件名称是否以Array单词开头
        sop(str.startsWith("Array"));
        //判断文件名称是否以Array单词结尾
        sop(str.endsWith(".java"));
        //判断文件名称是否包含Demo
        sop(str.contains("Demo"));

    }
    public static void main(String[] args) {
        method_is();
    }
}

3.转换
3.1将字符数组转换为字符串
构造函数:String(char [] value)
String(char[] value, int offset, int count) :将字符数组的一部分转换为字符串,offset开始位置,count个数
静态方法:public static String copyValueOf(char[] data)
public static String copyValueOf(char[] data,int offset, int count)

  3.2将字符串转换为字符数组
  public char[] toCharArray()
  3.3将字节数组转换为字符串
  String(byte [] value)
                          String(byte[] value, int offset, int count) :将字节数组的一部分转换为字符串,offset开始位置,count个数
  3.4将字符串转换为字节数组
  public byte[] getBytes(Charset charset)
  3.5将基本数据类型转换为字符串
        public static String valueOf(int i)
         public static String valueOf(double i)
public static void method_trans() {
        char[] arr= {'a','b','c','d','e','f'};
        //将字符数组转换为字符串
        String s=new String(arr);
        String s1=new String(arr,1,3);
        sop("s="+s);
        sop("s="+s1);
        //将字符串数组转换为字符数组
        String s2="zdeicfh";
        char[] ch=s2.toCharArray();
        for(int x=0;x<ch.length;x++) {
            sop("ch="+ch[x]);
        }

    }
posted @ 2017-07-14 12:25  测试开发分享站  阅读(139)  评论(0编辑  收藏  举报