字符串的特點:
- 字符串的內容永不可變。
- 正式因爲字符串的內容永不可變,所以字符串是可以共享使用的。
- 字符串效果上相當於是char[]字符數組,但是底層原理是byte[]字節數組。
創建字符串的常見3+1種方式。
三種構造方法:
- public String():創建一個空白字符串,不含有任何內容。
- public String(char[] array):根據字符數組的內容,來創建對應的字符串。
- public String(byte[] array):根據字節數組的內容,來創建對應的字符串。
一種直接創建:
String str = “”;
注意:直接寫上雙引號,就是字符串對象。
package day04;
public class Demo01 {
public static void main(String[] args) {
// 使用空參數構造
String str1 = new String(); // 小括號留空,此時字符串什麼內容都沒有
System.out.println("第一個字符串是: " + str1);
// 根據字符數組創建字符串
char[] array = { 'A','B','C' };
String str2 = new String(array);
System.out.println("第二個字符串是:" + str2);
// 根據字節數組來創建字符串
byte[] byteArray = { 97,98,99 };
String str3 = new String(byteArray);
System.out.println("第三個字符串是: " + str3);
// 直接創建
String str4 = "Hello";
System.out.println("第四個字符串是: " + str4);
}
}
字符串常量池:程序當中直接寫上的雙引號字符串就在字符串常量池當中。
對於基本類型來說,==是進行數值的比較。
對於引用類型來說,==是進行地址值的比較。
如果確實需要字符串內容的比較,可以使用兩種方法:
- public boolean equals(Object obj):參數可以是任何對象,只有參數是一個字符串並且內容相同纔會給出True,否則返回False。
- public boolean equalsIgnoreCase(String str):忽略大小寫,進行內容的比較。
package day04;
/*
equals 方法具有對稱性,就是a.equals(b)與b.equals(a)的效果相同
如果比較雙方一個常量一個變量,推薦把常量字符串寫在前面。
*/
public class StringEqual {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
char[] charArray = { 'h','e','l','l','o' };
String str3 = new String(charArray);
System.out.println(str1.equals(str2)); // True
System.out.println(str2.equals(str3)); // false
System.out.println(str1.equalsIgnoreCase(str3)); // true
}
}
String當中獲取相關的常用方法有:
- public int length():獲取字符串當中含有的字符串個數,拿到字符串長度。
- public String concat(String str):將當前字符串和參數字符串拼接成爲返回值新的字符串。
- public char chatAt(int index):獲取指定索引位置的單個字符。(索引從0開始)。
- public int indexOf(String str):查找參數字符串在本字符串當中首次出現的索引位置,如果沒有返回-1。
package day05;
public class Demo2StringGet {
public static void main(String[] args) {
// 獲取字符串的長度
int length = "dhaiosdhakshdalh".length();
System.out.println("字符串的長度: " + length);
// 拼接字符串
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(str2);
System.out.println("拼接字符串: " + str3);
// 獲取指定索引位置的字符
char ch = "Hello".charAt(1);
System.out.println("獲取的指定索引位置的字符是: " + ch);
// 查找參數字符串在本來字符串當中出現的第一次索引位置
String original = "Hello World";
int lo = original.indexOf("lo");
System.out.println("參數字符串出現的位置: " + lo);
}
}
字符串的截取方法:
- public String substring(int index):截取從參數位置一直到字符串末尾,返回新字符串。
- public String substring(begin end):截取從begin開始到end結束的中間的字符串。
- 備註:[begin,end)。包含左邊,不包含右邊。
package day05;
public class DemoSubString {
public static void main(String[] args) {
String str1 = "HelloWorld";
String str2 = str1.substring(5);
System.out.println("截取的字符串是: " + str2);
String str3 = str1.substring(4,6);
System.out.println("截取的字符串是: " + str3);
}
}
String當中與轉換相關的常用方法有:
- public char[] toCharArray():將當前字符串拆分成爲字符數組作爲返回值。
- public byte[] getBytes():獲取當前字符串底層的字節數組。
- public String replace(CharSequence oldString,charSequence newString):將所有出現的舊的字符串替換成爲新的字符串,返回替換之後的新字符串。其中CharSequence可以接受字符串類型。
package day05;
public class DemoStringConvert {
public static void main(String[] args) {
char[] chars = "Hello".toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
byte[] bytes = "ABC".getBytes();
System.out.println(bytes[1]);
String str1 = "How do you do!";
String o = str1.replace("o", "*");
System.out.println("替換後的字符串是: " + o);
}
}
分割字符串的方法:
- public String[] split(String regex):按照參數的規則,將字符串切分成爲若干部分。
- 注意事項:split方法的參數其實是一個正則表達式。
package day05;
public class DemoStringSplit {
public static void main(String[] args) {
String str1 = "aaa,bbb,ccc";
String[] array1 = str1.split(",");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
}
}
練習:
1.定義一個方法,把數組{1,2,3}按照指定的格式拼接成爲一個字符串。格式按照如下:[world1#world2#world3#]。
package day05;
public class DemoStringPractice {
public static void main(String[] args) {
int[] array = { 1,2,3,4 };
System.out.println(fromArray(array) );
}
public static String fromArray(int[] array) {
String str = "[";
for (int i = 0; i < array.length; i++) {
if (i == array.length - 1) {
str += "world" + array[i] + "]";
}
else {
str += "world" + array[i] + "#";
}
}
return str;
}
}
2.鍵盤輸入一個字符串,並且統計其中各種字符串出現的次數。
package day05;
import java.util.Scanner;
public class DemoStringCount {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串: ");
String inpout = sc.next(); // 獲取字符串
int countUpper = 0; //大寫字母
int countLower = 0; // 小寫字母
int countNumber = 0; // 數字
int countOther = 0; // 其他
char[] chars = inpout.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] >= 'A' && chars[i] <= 'Z') {
countUpper++;
}
else if (chars[i] >= 'a' && chars[i] <= 'z') {
countLower++;
}
else if (chars[i] >= '0' && chars[i] <= '9') {
countNumber++;
}
else {
countOther++;
}
}
System.out.println("大寫字母是:" + countUpper + "小寫字母是:" + countLower + "數字是:" + countNumber + "其他是:" + countOther);
}
}