1. 程式人生 > >JAVA中的String對象

JAVA中的String對象

api ast 結果 build 字符串變量 idt .cn process fff

String 對象的特點
  1. String對象的數據不可改變!

  2. String類型對象封裝了一個字符串數組

  3. 任何的操作也不能改變這個字符數組的內容

    String s = "123";
    String ss = s;
    s = s+"abc";
    System.out.println(s);//123abc
    System.out.println(ss);//123

說明: 在如上代碼中改變的是字符串引用變量,但是字符串沒有變!好處是字符串可以“作為”基本類型使用!

原理:

技術分享圖片技術分享圖片

字符串常量的重用現象

Java中的字符串常量是盡肯能重復使用的!好處是節省資源(內存)

  1. 字符串字面量(直接量)在內容一樣時候重用同一個String對象。 String s1 = "123abc"; String s2 = "123abc"; //s1 s2 是字符串類型的引用變量 //"123abc" 是直接量(字面量)

  2. 字符串常量也參與重用!

  3. 字面量、常量的運算結果是字符串,也重用同一個字符串 String s4 = "123abc"; String s5 = 123 + "abc";//1+"23abc" System.out.println(s4==s5);//true

  4. 字符串變量,變量的運算結果 和 新創建的字符串對象不參與重用!! String name = in.nextLine();//Tom String s1 = "Tom and Jerry"; String s2 = name + " and Jerry"; System.out.println(s1==s2);//false String s3 = new String("Tom and Jerry"); System.out.println(s3==s1);//false

原理:

技術分享圖片技術分享圖片

經典題目:

String s1 = "1"+"23"+"abc";
String s2 = "1"+23+"abc";
String s3 = '1'+23+"abc";
System.out.print(s1==s2);
System.out.print(s1==s3);

如上代碼的執行結果:
A.truetrue B.truefalse C.falsetrue D.falsefalse

字符串中的字符

字符串中封裝了一個字符數組,字符串中的字符就是char類型的數據。

  1. char 類型是整數, 是一個字符的Unicode編碼。

  2. 16位無符號整數, 占用2個字節

案例:

String s = "Tom and Jerry";
//          0123456789012
char c = s.charAt(4);
System.out.println(c);//a
System.out.println((int)c);//97

indexOf 方法

找出一個字符在字符串中的位置:

indexOf() 1. 如果有重復,找出左側第一個位置 2. 如果沒有找到,返回-1

案例:

String s = "Tom and Jerry";
int i = s.indexOf('a'); 
System.out.println(i);//4
i = s.indexOf('r');
System.out.println(i);//10
i = s.indexOf('X');
System.out.println(i);//-1

str.indexOf("查找字符串", 起始位置)

String url = "http://tedu.cn/index.html";
int i = url.indexOf("/",7);
System.out.println(i);

lastIndexOf

反序查找:從右到左查找,返回字符的位置

String url = "http://tedu.cn/index.html";
int i = url.lastIndexOf("/");//14
System.out.println(i);//14
  1. 找到包 java.lang

  2. 找到類 String

  3. 找到方法 lastIndexOf()

substring 方法

從字符串中截取一部分作為子字符串

url.substring(起始位置)
//從起始位置開始到最後截取為子字符串

String url = "http://tedu.cn/index.html";
String filename = url.substring(15);
// filename = index.html

url.substring(起始位置, 結束位置)
//從起始位置開始到結束位置截取為子字符串
String url = "http://tedu.cn/index.html";
//            01234567890123456
// 包括起始不包括結束位置
String str = url.substring(7, 14);
String str = url.substring(7, 7+8);

trim

String str = " \t Tom \n \r";
String s = str.trim();

startsWith endsWith

檢測一個字符串是否以指定字符串開頭或結尾

String str = "Hello World!";
boolean b = str.startsWith("Hello");//true
b = str.startsWith("World");//false

b = str.endsWith("World");//false
b = str.endsWith("!");//true

案例:

String name = "demo.JPG";
if(name.toLowerCase().endsWith(".jpg")){
    System.out.println("圖片文件");
}

StringBuilder

Java 提供的用於計算字符串的API, 其運算性能好:

案例:

String s = "A";
s = s + "1";
s = s + "1";
s = s + "1";
System.out.println(s);

原理:

技術分享圖片技術分享圖片

性能比較:

    String s = "A";
    long t1 = System.currentTimeMillis();
    for(int i=0; i<10000; i++){
        s = s+"1";
    }
    long t2 = System.currentTimeMillis();
    System.out.println(s.length());
    System.out.println(t2-t1);

    StringBuilder ss = 
        new StringBuilder("A");
    t1=System.nanoTime();
    for(int i=0; i<10000; i++){
        ss.append("1");
    }
    t2 = System.nanoTime();
    System.out.println(ss.length());
    System.out.println(t2-t1);


JAVA中的String對象