ACM之路――字符串处理 Stringh和StringBuffer

String常见操作:

1、用String类的charAt方法来取出其中某一字节,计数从0开始:

String a = "Hello"; // a.charAt(1) = 'e'


2、用substring方法可得到子串,如上例

System.out.println(a.substring(0, 4)) // output "Hell"

注意:substring的2参数位置上的字符不包括进来。这样做使得 s.substring(a, b) 总是有 b-a个字符


3、使用replaceAll()替换对应的字符串

public class Main {
    public static void main(String[] args) {
        String str="dasdsad3213adasd3123";
        String strTemp=str.replaceAll("[a-zA-Z]", "");
        System.out.print(strTemp);//输出32133123
    }
}

使用replaceAll方法将字符串里面的英文字符全部替换成空字符。


4、使用split()方法分割字符串

public class Main {
    public static void main(String[] args) {
        String str="2013/09/24";
        String[] strTemp=str.split("/");
        for(int i=0;i<strTemp.length;i++){
            System.out.print(strTemp[i]+" ");//输出2013 09 24
        }
    }
}


5、字符串连接可以直接用 + 号,如

String a = "Hello";

String b = "world";

System.out.println(a + ", " + b + "!"); // output "Hello, world!"

如想直接将字符串中的某字节改变,可以使用另外的StringBuffer


String和StringBuffer的区别

String

StringBuffer

a) 不可变对象,对于已经存在的String对象的修改都是重新创建一个新的对象


b) 可以直接赋值和通过构造函数进行赋值。


区别直接赋值,先判断java字符串池中是否有相同的字符串,则无需重新定义(共享设计)。构造函数赋值则每次都需要在内存中开辟新的单元。


c) String 覆盖了 equals 方法和 hashCode


方法。适合集合的操作。

a) 可变对象


b) 只能通过构造函数进行赋值


c) StringBuffer没有覆盖equals 方法和 hashCode 方法。


一般来说字符串连接操作中StringBuffer的效率要比StringAppend()方法实现字符串连接操作。

关键点:

1、 简单认为append()效率好于+是错误的。

因为在编译其能够确定字符串值得情况下,使用“+”效率最高。

例如:String result=“hello”+“world”;//一个对象

2、 不要使用new()创建String。因为new()是开辟新的内存。

3、 避免使用“+=”来构造字符串。

4、 在声明StringBuffer对象的时候,制定合适的capacity,不要使用默认值(16)

5、 注意intern()的使用。

s.intern()== t.intern()true,当且仅如果s.equalst)是true。即内容相同时。


字符串与int、char[]之间的转换

String转换成char

Char ch[]=str.toCharArray()

char转换为String

1)String s=new String(ch);


2)String s=ch.toString();

String转换成int(该字符串是数字型否则在转换过程会出错)

1) Int i=Integer.parseInt(str)


2)Int i=Integer.valueOf(str).intValue;

int转换成String


1) String s=String.valueof(i);


2)String s=Integer.toString(i);


3)String s=“”+i;




你可能感兴趣的:(java,字符串,String,StringBuffer)