字符串基本操作

  1. String及其常用API
    1.1String是不可变对象。
    java.lang.String使用了final修饰,不能被继承。
    字符串底层封装了字符数组及针对字符数组的算法。
    字符串一旦创建,对象就无法改变,但是字符串引用可以重新赋值。
    String不适合用于频繁的修改:

    1.2 String常量池。
    Java为了提高性能,静态字符串在常量池中创建,并且尽量使用同一个对象,重用静态字符串。
    对于重复出现的字符串直接量,JVM首先会在常量池中查找,如果有会直接调用,返回该对象。
public class testConstantpool{

    public static void main(String[] args) {

        //该Hello常量对象会放入常量池中
        String string1="Hello";   
        //不会创建新的对象,而是使用常量池中的对象
        String string2="Hello";

        System.out.println(string1==string2);   //输出true
    }
}
public class testConstantpool{

    public static void main(String[] args) {

        String string1="123Hello";
        String string2="123Hello";
        String string3="123"+"Hello";
        String string4=new String("123Hello");
        String string5=new String("123Hello");

        System.out.println(string1==string2);  //输出true
                /**
         * 在Java中,编译器首先会对都是字面量的表达式进行计算,String3中会将字符串"123"和"Hello"进行运算得到"123Hello"
         * 然后运行程序,将String3与String1进行比较,因为都是指向"123Hello"这个对象,所以他们的地址一样,得到结果为true.
         */
        System.out.println(string1==string3);   //输出true
        /**
         * 使用new创建了新的对象,不在去常量池中寻找,所以这两个不是同一个对象,输出为false
         */
        System.out.println(string1==string4);   //输出false
        /**
         * 每次使用new都会创建一个新的对象
         */
        System.out.println(string4==string5);  //输出false 
    }
}

1.3 String的构造方法。
(1)String( ):创建一个内容为空的字符串”“。
(2)String(String value):字符串参数value为字符串指定的内容。
(3)String(char[] value):字符数组参数value为字符串指定的内容。
(4)String(byte[] bytes):
1.4 String类常用方法。
(1)length( ):返回字符串的字符个数。
(2)char charAt(in index):返回字符串中index位置上的字符。
(3)getChar(int srcBegin,int srcEnd,char dst[],int dstbegin):从当前字符串中复制若干字符到指定字符数组dst[]中.

String s="0123456";
char[] chars=new char[3];s.getChars(1,4,chars,0);   //数组chars的内容是{1,2,3}

(4)equals(object str)和equalsIgonreCase(object str):判断两个字符串是否相同。前者区分大小写,后者不区分大小写。
(5)int compareTo(String str):按字典顺序比较字符串大小。如源字符串较小返回小于0的值,相等返回0,较大返回大于0的值。

system.out.println("a"compareTo("b");  //返回-1
system.out.println("a"compareTo("a");  //返回0
system.out.println("c"compareTo("b");  //返回1

(6)indexOf( )和lastIndexOf( ):在字符串检索特定字符或子字符串,前者从字符串首位置开始查找,后者从末尾开始。未查找到返回-1。
(7)concat(String str):把字符串str附加在当前字符串的末尾。

String str="Hello";
String newStr=str.concat(" World");
system.out.println(newStr);  //打印 Hello World

(8)substring( ):返回字符串的一个子字符串,有两种重载形式。

public String substring(int beginIndex);  //参数为开始位置,结束位置为字符串长度-1。
public String substring(int beginIndex,int endIndex);  //参数为开始位置,结束位置为endIndex-1。

(9)String[ ] split(String regex):根据参数把字符串分割成几个子字符串。

String str="11:22:33";
str.split(":");   //输出11 22 33

(10)replaceAll(String regex,String replacement)和replaceFirst(String regex,String replacement):参数replacement替换参数regex,前一个方法是替换所有的,后一个方法是只替换第一个。

String str="12:23:34";
String newStr=str.replaceAll(":","-");  //输出12—23-34
String newStr1=str.replaceFirst(":","-");   //输出12-23:34

(11)trim( ):把字符串首位的空格删除。

String str=“  12  34  ”;
system.out.println(str.trim());   //输出"12  34"

(12)String valueOf( ):把基本类型转换为String类型。

System.out.println(String.valueOf(-129));  //输出-129

(13)toUpperCase( )和toLowerCase( ):前者是把字符串所有字符改成大写,后者是把所有字符改成小写。

  1. StringBuffer及其API
    2.1 StringBuffer是字符串变量。
    是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了。
    2.2 StringBuffer的构造方法。
    (1)StringBuffer( ):建立一个空缓冲区,初始字符容量为16。
    (2)StringBuffer(int length):建立一个初始容量为length的空缓冲区。
    (3)StringBuffer(String str):缓冲区初始内容为str,并且另外提供16个字符的初始容量。
    2.3 StringBuffer常用方法。
    (1)length( ):返回字符串长度。
    (2)append( ):向缓冲区添加新的字符串。
StringBuffer sb=new StringBuffer();
sb.append("Hello");
sb.append("World");
System.out.println(sb);   //打印"HelloWorld"

(3)toString( ):返回缓冲区的字符串。
(4)charAt(int index)和setCharAt(int index.char ch):前者是返回字符串中index位置上的字符,后者是在index位置添加字符串ch。
(5)getChar(int srcBegin,int srcEnd,char dst[],int dstbegin):从当前字符串中复制若干字符到指定字符数组dst[]中.、
(6)substring( ):返回字符串的一个子字符串,有两种重载形式。与String一样。
(7)insert(int offset,String str):在字符串offset位置插入字符串str。
3.比较String和StringBuffer。
(1)两个类都覆盖了Object类的toString方法,但是各自实现方式不同。String是返回当前实例本身的引用,StringBuffer是返回一个以当前StringBuffer的缓冲区的所有字符为内容的新的String对象的引用。

String s="abc";
StringBuffer sb=new StringBuffer("abc");
system.out.println(s==s.toString());  //打印true
system.out.println(sb==sb.toString());  //打印false

(2)String对象可以用“+”进行连接,而StringBuffer类对象不可以。
4.StringBuffer类和StringBulider类差不多,都是字符串可变量。但是前者是线程安全的,同步处理,性能稍慢 ,后者是非线程安全的,并步处理,性能稍快。
学习API的主要是记住有哪些方法具有什么样的功能,目前不必记住方法的参数什么的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值