JAVA中的String對象
String對象的數據不可改變!
String類型對象封裝了一個字符串數組
任何的操作也不能改變這個字符數組的內容
String s = "123"; String ss = s; s = s+"abc"; System.out.println(s);//123abc System.out.println(ss);//123
說明: 在如上代碼中改變的是字符串引用變量,但是字符串沒有變!好處是字符串可以“作為”基本類型使用!
原理:
字符串常量的重用現象
Java中的字符串常量是盡肯能重復使用的!好處是節省資源(內存)
字符串字面量(直接量)在內容一樣時候重用同一個String對象。 String s1 = "123abc"; String s2 = "123abc"; //s1 s2 是字符串類型的引用變量 //"123abc" 是直接量(字面量)
字符串常量也參與重用!
字面量、常量的運算結果是字符串,也重用同一個字符串 String s4 = "123abc"; String s5 = 123 + "abc";//1+"23abc" System.out.println(s4==s5);//true
字符串變量,變量的運算結果 和 新創建的字符串對象不參與重用!! 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類型的數據。
char 類型是整數, 是一個字符的Unicode編碼。
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
找到包 java.lang
找到類 String
找到方法 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對象