前言
package com.kjxy.st;public class TestString1 {public static void main(String[] args) {String s1 = "hello";String s2 = "hello";String s3 = new String("hello");String s4 = new String("hello");System.out.println(s1 == s2);System.out.println(s1.equals(s2));System.out.println(s3 == s4);System.out.println(s3.equals(s4));}
}
運行發現
這時候我們得通過畫圖來了解一下
可以發現字符串生成的是放在字符串池里面的,而new出來的是放在堆里面的,都是一個個獨立的對象
所以來判斷兩個字符串是不是一樣的,不能簡單的用==來進行判斷,而是應該用equals進行判斷
package com.kjxy.st;public class TestString2 {public static void main(String[] args) {String s = "hello";s = "world";}
}
為什么string類通常不能改變?
因為string類是final修飾的
String類常用方法
length() 返回當前字符串的長度
charAt(int index) 返回當前字符串中第index位置的字符
toUpperCase() 返回當前字符串的大寫形式
toLowerCase() 返回當前字符串的小寫形式
equalslgnoreCase(String str) 忽略大小寫,比較兩個字符串是否相同
startsWidth(String str) 判斷當前字符串是否以str開頭
endsWidth(String str) 判斷當前字符串是否以str結尾
indexOf(String str) 返回str在當前字符串中第一次出現的位置,如果str沒有在當前字符串中出現,那么返回-1
lastIndexOf(String str) 返回str在當前字符串中最后一次出現的位置,如果str沒有在當前字符串中出現,那么返回-1
substring(int start) 從第start位開始截取字符串,一直截到最后
substring(int start,int end) 從第start位開始截取字符串,一直截到第end位,但不包含第end位
valueOf(參數) 可以把各種數據類型的參數轉換成字符串并返回
split(String str) 該方法會返回一個String[],數組中的元素是根據str拆分得來的
1.length() 返回當前字符串的長度
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.length());}
}
2.charAt(int index) 返回當前字符串中第index位置的字符
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.length());System.out.println(s1.charAt(0));}
}
用數組循環遍歷
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";for (int i = 0; i < s1.length(); i++) {System.out.println(s1.charAt(i));}}
}
3.toUpperCase() 返回當前字符串的大寫形式
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.toUpperCase());}
}
4.toLowerCase() 返回當前字符串的小寫形式
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s2.toLowerCase());}
}
5.equalslgnoreCase(String str) 忽略大小寫,比較兩個字符串是否相同
實際利用場景 (驗證碼大小寫不敏感)
String varifyCode="er45";
String myCode ="er45";
varifyCode.toLowerCase().equals(myCode.toLowerCase());
然后判斷他是否為true,如果true則是正常的,否則不正常
String varifyCode="er45";
String myCode ="er45";
System.out.println(varifyCode.equalsIgnoreCase(myCode));
可以發現是true
6.startsWidth(String str) 判斷當前字符串是否以str開頭
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.startsWith("how"));}
}
7.endsWidth(String str) 判斷當前字符串是否以str結尾
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.endsWith("?"));}
}
8.indexOf(String str) 返回str在當前字符串中第一次出現的位置,如果str沒有在當前字符串中出現,那么返回-1
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.indexOf("o"));}
}
發現應該返回的是第一次的o,結果應該是1
如果沒有出現則是-1
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.indexOf("z"));}
}
9.lastIndexOf(String str) 返回str在當前字符串中最后一次出現的位置,如果str沒有在當前字符串中出現,那么返回-1
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.lastIndexOf("o"));}
}
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.lastIndexOf("z"));}
}
10.substring(int start) 從第start位開始截取字符串,一直截到最后
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.substring(4));}
}
11.substring(int start,int end) 從第start位開始截取字符串,一直截到第end位,但不包含第end位
package com.kjxy.st;public class TestString3 {public static void main(String[] args) {String s1 = "how hava you been?";String s2 = "HOW HAVA YOU BEEN?";System.out.println(s1.substring(4, 10));}
}
實際運用場景
//png jpg bmp
String myFileName = "123.zip";
此時就可以用字符串截取函數進行判斷,但是這里從安全的角度看還是不安全的,因為能夠后綴拓展名進行繞過
String myFileName = "abc.PNG";
String extName = myFileName.substring(myFileName.lastIndexOf(".")+1);
if (extName.equalsIgnoreCase("jpg")||extName.equalsIgnoreCase("png")||extName.equalsIgnoreCase("bmp")){System.out.println("上傳文件正確");
}else {System.out.println("上傳文件有誤,請重新上傳!");
}
}
}
12.valueOf(參數) 可以把各種數據類型的參數轉換成字符串并返回
Person類
package com.kjxy.st;public class Person {private String name;private int age;;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(int age, String name) {this.age = age;this.name = name;}
}
主函數類
package com.kjxy.st;public class TestString4 {public static void main(String[] args) {int i =5;double d =3.14;String s1 = String.valueOf(i);String s2 = String.valueOf(d);Person p = new Person(20,"張飛");String s3 =String.valueOf(p);System.out.println(s1);System.out.println(s2);System.out.println(s3);}
}
然后運行發現其實是調用了toString方法
為了驗證我們的正確性,我們開始可以查看其api文檔,發現它確實調用了toString方法
tips
//正則表達式// [0-8][a-z]@[^0-9][a-z].[a-z*]
13.split(String str) 該方法會返回一個String[],數組中的元素是根據str拆分得來的
package com.kjxy.st;public class TestString5 {public static void main(String[] args) {String s = "wer-234g-hhj8-12cc";String []arr =s.split("-");for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}
實際運用場景
//張三-25-老師
//李四-20-清潔工
//中國-哪吒-666
然后就可以進行 拆分了