【java学习】字符串

来源:互联网 发布:淘宝网店进货 编辑:程序博客网 时间:2024/05/22 06:32

1,字符串函数

(start,end) 从start到 index end - 1.

1)字符串转换为数组

①转换为字符数组

char[] ch = str.toCharArray();

②将分隔符分开的字符串转换为数组

data = "aa_bb_cc";String[] param = data.split("_");

param={“aa”,”bb”,”cc”}

2)字符数组转为字符串

String.valueOf(ch);

3)去掉空格

str.trim();

4)截取

str.substring(3);//"Hello world!"-->"lo world!"str.substring(3,7);//"Hello world!"-->"lo w"

5)索引

str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)str1.IndexOf("字",start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度

2,String、StringBuffer和StringBuilder区别

1)String

字符串常量。
是不可变对象。每次对String对象改变时,都等同生成了一个新的String对象,然后指针指向新的String对象,从而耗内存,影响系统性能。
在一下字符串对象生成中,String效率远比StringBuffer快:

 String S1 = “This is only a” + “ simple” + “ test”; StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

但如果拼接的字符串来自另外的String对象,速度就会变慢,如:

String S2 = “This is only a”;String S3 = “ simple”;String S4 = “ test”;String S1 = S2 +S3 + S4;

2)StringBuffer

字符串变量(线程安全),类似String字符串缓冲区。
推荐使用。每次修改对象的值都是修改对象本身,不生成新的对象。减少GC,提高效率。

方法:
append方法:追加字符串。
insert方法:在指定点添加字符。z.insert(4, "le")//“start”-->“starlet”

3)StringBuilder

字符串变量(非线程安全).
比StringBuffer快,但不保证同步,多用在单线程(推荐)。

3,demo

1)字符串智能截取

package luo.StringCut;/** * 字符串截取函数 * 要求: * 1,输入一个字符串和字节数,输出为按字节截取的字符串。 * 2,保证汉字不被截半个,例如("人ABC",4)="人AB",("人ABC们EF",6)="人ABC" * @author luo * *分析: *java语言中,默认使用Unicode编码方式,即每个字符占两个字节, *因此可以用来存储中文。 *虽然String是由char组成,但存储时,每个英文占一个字符,中文2个字符。 */public class StringCut {    /**     * 判断字符c是否是中文字符,如果是返回true     * @return     */    private static boolean isChinese(char c){        String s = String.valueOf(c);        return s.getBytes().length>1 ? true : false;    }    public static String StringCut(String str, int len){        if(null == str || 0 == len){            return "";        }        if(str.length() < len){            System.out.println("非法信息:截取长度大于字符串长度!");            return "";        }        char[] charArr = str.toCharArray();        StringBuilder sb = new StringBuilder("");        int count = 0;//用来记录当前截取字符的长度        for(char cc:charArr){            if(count < len){                if(isChinese(cc)){                    //如果要截取子串的长度只差一个字符,但是接下来的字符是中文,则截取结果子串中不保存这个中文字符                    if(count + 1 == len){                        return sb.toString();                    }                    count = count + 2;                    sb = sb.append(cc);                }else{                    count = count + 1;                    sb = sb.append(cc);                }            }else{                break;            }        }        return sb.toString();    }}
package luo.StringCut;public class Main {    public static void main(String[] args){        //("人ABC",4)="人AB",("人ABC们EF",6)="人ABC"        System.out.println(StringCut.StringCut("人ABC",4));        System.out.println(StringCut.StringCut("人ABC们EF",6));    }}

2)字符串反转

package luo.StringReverse;/** * 不利用java类库,实现字符串反转 * @author luo * *分析:很多种方法可以实现。 *1,数组反转法: *将字符串转换为字符数组,然后对数组进行反转,然后再反转为字符串。 *2,逆序遍历法: *把字符串转换为字符数组,逆向遍历数组,然后拼接遍历到的字符即可。 *3,递归法:(高水平代码) *递归地把字符移动到字符串的最后一个位置。 */public class StringReverse {    /**     * 1,数组反转法:     *将字符串转换为字符数组,然后对数组进行反转,然后再反转为字符串。     */    public static String reverse1(String str){        char[] ch = str.toCharArray();        char c;//交换中间值        int len = ch.length;        for (int i = 0; i < len/2; i++) {            c = ch[i];            ch[i] = ch[len - i - 1];            ch[len - i - 1] = c;        }        return String.valueOf(ch);    }    /**     *2,逆序遍历法:     *把字符串转换为字符数组,逆向遍历数组,然后拼接遍历到的字符即可。     */    public static String reverse2(String str){        StringBuilder sb = new StringBuilder();        char[] ch = str.toCharArray();        for (int i = ch.length-1; i >=0; i--) {            sb.append(ch[i]);        }        return sb.toString();    }    /**     *3,递归法:     *递归地把字符移动到字符串的最后一个位置。     */    public static String reverse3(String str){        if(str.length() < 1){            return str;        }        return reverse3(str.substring(1)) + str.charAt(0);    }}
package luo.StringReverse;public class Main {    public static void main(String[] args){        System.out.println(StringReverse.reverse1("reverse1"));        System.out.println(StringReverse.reverse2("reverse2"));        System.out.println(StringReverse.reverse3("reverse3"));    }}

3)

0 0
原创粉丝点击