您的位置:首页 > 编程语言 > Java开发

java String功能--13

2015-08-04 17:08 393 查看

String功能介绍

[code]class StringDemo
{
    public static void main(String[] args)
    {
        String s = new String();//跟下面的一回事
        String s1 = "abc";//s1是一个类类型变量,"abc"是一个对象
                          //字符串最大特点:一旦被初始化就不可以被改变。

        String s2 = new String("abc");

        //s1和s2有什么区别?
        //s1在内存中有一个对象
        //s2在内存中有两个对象
        //new是一个对象,"abc"也是一个对象。

        System.out.println(s1==s2);//因为s1跟s2是两个不同的对象,所以是false
        System.out.println(s1.equals(s2));//String类复写了Object类中的equals方法,
                                          //该方法用于判断字符串是否相同。
        /*
        String s1 = "abc";
        String s2 = new String("abc");

        String s3 = "abc";

        System.out.println(s1==s2);         //false
        System.out.println(s1==s3);         //true
        System.out.println(s1.equals(s3));  //s1跟s3地制值也是一样的,true
        */                                    
    }
}


String类适用于描述字符串事物,

那么它就提供了多个方法对字符串进行操作

常见的操作有哪些?

“abcd”

1,获取

1.1字符串中包含的字符数,也就是字符串的长度。

int length():获取长度

1.2根据位置获取位置上某个字符

char charAt(int index)

1.3根据字符获取该字符在字符串中的位置

int indexOf(int ch):返回的是ch在字符串中第一次出现的位置

indexOf(int ch, int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置

int indexOf(String str);返回的是str在字符串中第一次出现的位置

indexOf(String str, int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置

int lastIntexOf(int ch):反向索引一个字符出现位置

[code]class StringMethodDemo
{
    public static void method_get()
    {
        String str = "abcdeakpf";

        //长度
        sop(str.length());

        //根据索引获取字符
        sop(str.charAt(4));//当访问到字符串中不存在的角标时
                            //会发生StringIndexOutOfBoundsException(角标越界异常)

        //根据字符获取索引
        sop(str.indexOf('c',2));//如果没有找到,返回-1

        //反向索引一个字符出现位置
        sop(str.lastIndexOf("a"));//从右往左查找

    }

    public static void main(String[] args)
    {

        method_get();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




2,判断

2.1字符串中是否包含某一个子串

boolean contains(str):

特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在。所以,也可以用于对指定字符串判断是否包含。

if(str.indexOf(“aa”)!=-1)

而且,该方法既可以判断,又可以获取出现的位置。

2.2字符中是否有内容

boolean isEmpty():原理就是判断长度是否为0

2.3字符串是否是以指定内容开头

boolean startWith(str)

2.4字符串是否是以指定内容结尾

boolean endWith(str)

2.5判断字符串内容是否相同。复写了Object类中的equals方法

boolean equals(str);

2.6判断内容是否相同,并忽略大小写

boolean equalsIgnoreCase();

[code]class StringMethodDemo
{
    public static void method_is()
    {

        String str = "ArrayDemo.java";

        sop(str.startsWith("Array"));//判断文件是名否是Array单词开头
        sop(str.endsWith(".java"));//判断文件名是否是.java的文件
        sop(str.contains("Demo"));//判断文件名中是否含有Demo
    }

    public static void main(String[] args)
    {

        method_is();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




3.转换

3.1将字符数组转成字符串

构造函数:String(char[])

String(char[],offset,count):将字符数组中的一部分转成字符串

静态方法:static String copyValueOf(char[]);

static String copyValueOf(char[] date,int offset,int count);

static String valueOf(char[])

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)

特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

[code]class StringMethodDemo
{
    public static  void method_trans()
    {
        char[] arr = {'a','b','c','d','e','f'};

        String s= new String(arr,2,3);

        sop("s="+s);

        String s1 = "zxcpso";

        char[] chs = s1.toCharArray();

        for(int x=0;x<chs.length;x++)
        {
            sop("ch="+chs[x]);
            //System.out.print(chs[x]+",");
        }
    }

    public static void main(String[] args)
    {

        method_trans();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




4,替换

String replace(oldchar,newchar)

[code]class StringMethodDemo
{
    public static void method_replace()
    {
        String s = "hello java";
        String s1 = s.replace('a','n');//如果要替换的字符不存在,结果还是原字符串
        String s2 = s.replace("java","world");//替换字符串
        sop("s="+s);
        sop("s1="+s1);
        sop("s2="+s2);
    }

    public static void main(String[] args)
    {

        method_replace();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




5,切割

String[] split(regex)

[code]class StringMethodDemo
{
    public static void method_split()
    {
        String s = "zhangsan,lisi,wangwu";
        String[] arr = s.split(",");
        for(int x=0;x<arr.length;x++)
        {
            sop(arr[x]);
        }   

    }

    public static void main(String[] args)
    {

        method_split();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




6,子串 获取字符串中的一部分

String substring(begin)

String substring(begin,end)

[code]class StringMethodDemo
{
    public static void method_sub()
    {
        String s = "abcdef";
        sop(s.substring(2));//从指定位置到结尾。如果角标不存在,会出现字符串角标越界异常
        sop(s.substring(2,4));//包含头  不包含尾 获取全部:s.substring(0,s.length())
    }

    public static void main(String[] args)
    {

        method_sub();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




7,转换,去除空格,比较。

7.1将字符串转换成大写或者小写

String toUpperCase();

String toLowerCase();

7.2将字符串两端的多个空格去除

String trim();

7.3对两个字符串进行自然顺序的比较

int compareTo(String);

[code]class StringMethodDemo
{
    public static void method_7()
    {
        String s = "   Hello Java   ";
        sop(s.toLowerCase());
        sop(s.toUpperCase());
        sop(s.trim());

        String s1 = "a1c";
        String s2 = "aaa";

        sop(s1.compareTo(s2));
    }

    public static void main(String[] args)
    {

        method_7();

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}




String练习

一,模拟一个trim方法,去除字符串两端的空格

思路:

1,判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止,结尾处也是如此。

2,当开始和结尾都判断到不是空格时,就是要获取的字符串

[code]class StringTest
{
    public static void sop(String str)
    {
        System.out.println(str);
    }
    public static void main(String[] args)
    {
        String s = "    ad fe    ";
        sop("("+s+")");
        //s = myTrim(s);
        //sop("("+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);
    }

}




二,将一个字符串进行反转,将字符串中指定部分进行反转

思路:

1,曾经学过对数组的元素进行反转

2,将字符串变成数组,对数组反转

3,将反转后的数组变成字符串

4,只要将要反转的部分的开始和结束位置作为参数传递即可

[code]class StringTest
{
    public static void sop(String str)
    {
        System.out.println(str);
    }
    public static void main(String[] args)
    {
        String s = "123456tyuiqwer";
        sop("("+s+")");

        sop("("+reverseString(s)+")");
        sop("("+reverseString(s,6,9)+")");
    }

    //练习二
    /*
    思路:
    1,将字符串变成数组
    2,对数组反转
    3,将数组变成字符串
    */
    public static String reverseString(String s,int start,int end)
    {
        //字符串变数组
        char[] chs = s.toCharArray();

        //反转数组
        reverse(chs,start,end);

        //将数组变成字符串
        return new String(chs);
    }

    public static String reverseString(String s)
    {
        return reverseString(s,0,s.length());
    }

    private static void reverse(char[] arr,int x,int y)
    {
        for(int start=x,end=y-1;start<end;start++,end--)
        {
            swap(arr,start,end);
        }
    }
    private static void swap(char[] arr,int x,int y)
    {
        char temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }
}




三,获取一个字符串在另一个字符串中出现的次数

“abkkcdkkefkkskkdf”

思路:

1,定义一个计数器

2,获取kk第一次出现的位置

3,从第一次出现位置后剩余的字符串中继续获取kk的位置

每获取一次就计数一次

4,当获取不到时,计数完成

[code]class StringTest2
{
    //练习三
    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 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 = "abkkcdkkefkkskkdf";

        sop("count===="+getSubCount(str,"kk"));

        sop("count="+getSubCount_2(str,"kk"));
    }

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




StringBuffer

StringBuffer是字符串缓冲区

是一个容器

特点:

1,而且长度是可变化的

2,可以直接操作多个数据类型

3,最终会通过toString方法变成字符串

C create U update R read D delete

1,存储

StringBuffer append():将指定数据作为参数添加到已有数据结尾处

StringBuffer insert(Index,数据):可以将数据插入指定index位置

2,删除

StringBuffer delete(start,end):删除缓冲区中的数据,包括start,不包括end

StringBuffer deleteCharAt(index):删除指定位置的字符

3,获取

char charAt(int index)

int indexOf(String str)

int lastIndexOf(String str)

int length()

Sring substring(int start,int end)

4,修改

StringBuffer replace(start,end,string);

void setCharAt(int index,char ch);

5,反转

StringBuffer reverse();

6,将缓冲区数据存储到指定字符数组中

void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)

[code]class StringBufferDemo
{
    public static void main(String[] args)
    {

        StringBuffer sb = new StringBuffer("abcdef");
        char[] chs = new char[6];

        sb.getChars(1,4,chs,2);
        for(int x=0;x<chs.length;x++)
        {
            sop("chs["+x+"]="+chs[x]+";");
        }
    }

    public static void method_update()
    {
        StringBuffer sb = new StringBuffer("abcde");

        //sb.replace(1,4,"java");
        sb.setCharAt(2,'k');

        sop(sb.toString());

    }

    public static void method_del()
    {
        StringBuffer sb = new StringBuffer("abcde");

        //sb.delete(1,3);

        //清空缓存区
        //sb.delete(0,sb.length());

        //sb.delete(2,3);
        sb.deleteCharAt(2);

        sop(sb.toString());
    }

    public static void method_add()
    {
        StringBuffer sb = new StringBuffer();

        sb.append("abc").append(true).append(34);

        //StringBuffer sb1=sb.append(34);
        sb.insert(1,"qq");
        //sop("sb==sb1:"+(sb==sb1));
        sop(sb.toString());
        //sop(sb1.toString());
    }

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


在JDK1.5版本之后出现了StringBuilder

StringBuffer是线程同步

StringBuilder是线程不同步

以后开发建议使用StringBuilder

升级三个因素:

1,存储提高效率

2,简化书写

3,提高安全性

基本数据类型包装类

基本数据类型对象包装类

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 = Int.parseInt(“123”);

double d = Double.parseDouble(“12.12”);

boolean b = Boolean.parseBoolean(“true”);//或者false

十进制转成其他进制

toBinaryString();

toHexString();

toOctalString();

其他进制转成十进制

parseInt(string,radix);

[code]class IntegerDemo
{
    public static void sop(String str)
    {
        System.out.println(str);
    }

    public static void main(String[] args)
    {
        //整数类型的最大值
        //sop("int max:"+Integer.MAX_VALUE);

        //将一个字符串转成整数

        int num = Integer.parseInt("a23");//数字格式异常,要传入数字格式的字符串
        long x = Long.parseLong("1234");

        sop("num="+(num+4));
        sop("x="+(x+4));

        //sop(Integer.toBinaryString(-6));//十进制转二进制
        //sop(Integer.toHexString(60));//十进制转十六进制

        //其他进制转成十进制
        //int x = Integer.parseInt("3c",16);//前面是表现形式,后面是进制数   打印结果为这个表现形式在这个进制里代表的数的十进制表示

        //sop("x="+x);
    }
}




JDK1.5以后出现的新特性

[code]class IntegerDemo1
{
    public static void main(String[] args)
    {
        //method();

        //Integer x = new Integer(4);

        Integer x = 4;//自动装箱

        x = x + 2;//x+2: x 进行了自动拆箱,变成了int类型。和2进行运算,再进行装箱

        Integer m = 128;
        Integer n = 128;
        sop("m==n:"+(m==n));//结果为假。这是两个对象

        Integer a = 127;
        Integer b = 127;
        sop("a==b:"+(a==b));//结果为真,因为a和b指向了同一个Integer对象
                            //因为当数值在byte范围内时,对于新特性,如果该数值已经存在,则不会在开辟新的空间 
        method();
    }

    public static void method()
    {
        Integer x = new Integer("123");

        Integer y = new Integer(123);

        sop("x==y:"+(x==y));
        sop("x.equals(y):"+x.equals(y));
    }

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: