一、前言
前面,我們整體學習了有關文件操作方面的知識,實現了檢測、新建、修改文件並寫入或者複製移動的操作。本次學習的是有關字符串
方面的操作,爲方便大家學習,可以參照API閱讀此類的各個方法知識。
API鏈接如下:https://pan.baidu.com/s/1_DMTYTstbDtfdjutBE3h8Q 提取碼:elgp
字符串廣泛應用 在Java 編程中,在 Java 中字符串屬於對象,Java 提供了 String 類來創建和操作字符串。
二、任務學習
任務要求:
- 完成一個java application應用程序,完成字符串的各種操作。
- 操作包括字符串的初始化賦值和輸出。
- 操作包括兩個字符串相加合成爲一個新字符串。
- 操作包括兩個字符串比較其是否相同。
- 操作包括已知一個字符串,查找某一子字符串是否被包含在此字符串之中,如果包含,包含了多少次。
- 操作包括已知一個字符串及其包含的某一子字符串,把此子字符串替換爲其他的新的指定字符串。
1)分析學習:
1.1 字符串的初始化賦值和輸出
-
String類又稱作
不可變
字符序列。 -
String位於
java.lang
包中,Java程序默認導入java.lang
包下的所有類。 -
Java字符串就是
Unicode
字符序列,例如字符串“Java”就是4個Unicode
字符’J’、’a’、’v’、’a’組成的。 -
Java
沒有內置的字符串類型
,而是在標準Java類庫中提供了一個預定義的類String,每個用雙引號括起來的字符串都是String類的一個實例。
1.2 將兩個字符串合併爲新字符串
Java允許使用符號"+
"把兩個字符串連接
起來。
例:
String s1 = "Hello";
String s2 = "World! ";
String s = s1 + s2; //HelloWorld!
符號"+
“把兩個字符串按給定的順序連接
在一起,並且是完全按照給定的形式。
當”+"運算符兩側的操作數中只要有一個是字符串(String)類型
,系統會自動將另一個操作數轉換爲字符串然後再進行連接。
例:
int age = 18;
String str = "age is" + age; //str賦值爲"age is 18"
//這種特性通常被用在輸出語句中:
System.out.println("age is" + age);//age is 18
1.3 比較兩個字符串是否相同
“==
”代表比較雙方是否相同。如果是基本類型則表示值相等,如果是引用類型則表示地址相等即是同一個對象。
覆蓋:類 Object 中的 equals
Object類中定義有:public boolean equals(Object obj)
方法,提供定義“對象內容相等”的邏輯。比如,我們在公安系統中認爲id相同的人就是同一個人、學籍系統中認爲學號相同的人就是同一個人。
Object 的 equals
方法默認就是比較兩個對象的hashcode
,是同一個對象的引用時返回 true
否則返回 false
。
JDK提供的一些類,如String、Date、包裝類等,重寫了Object的equals方法,調用這些類的equals方法, x.equals (y) ,當x和y所引用的對象是同一類對象且屬性內容相等時(並不一定是相同對象),返回 true 否則返回 false。
equals
與equalsIgnoreCase
的區別在於:後者將此 String 與另一個 String 比較,不考慮大小寫
。如果兩個字符串的長度相同,並且其中的相應字符都相等(忽略大小寫
),則認爲這兩個字符串是相等的。
在忽略大小寫的情況下,如果下列至少一項爲 true,則認爲 c1 和 c2 這兩個字符相同。
1.4 查找字符串相互包含關係
在字符串中查詢某個char值時,此字符可以是單字母也可以是某個字符串,但是隻有包含指定的char值時纔會返回確定的查找值。
當我們需要查找子字符串出現的次數時,我們需要進行遍歷查找和切割判斷。
方法很多,我們這裏使用字符串截取的方案。使用indexOf
來查找子字符串出現處的索引,用substring
截取指導索引位置的字符串,即子串第一次出現的位置+長度=下一次的起始位置,如此循環查找,直至此字符串中沒有
這樣的字符,則返回 -1
退出循環語句。
1.5 替換字符串中指定字符
public String replace(char oldChar, char newChar)
方法可以返回一個新字符串,這個新串是通過用newChar
替換此字符串中出現的所有oldCha
r而生成的。
2)程序代碼:
爲實現整體效果,本人將以上所提的方法寫成總的一個程序,如下:
/* 項目名稱:Task_Du
* 創建時間:2019年4月9日
* 創建者:Administrator_wz
* 創建地點:kmust
* 功能:字符串的各項操作:賦值輸出、對比合成、查找替換
*/
import java.util.Scanner;//導入java.util包中的Scanner類
public class stringTest1{//創建類名
public static void main(String[] args){//程序的主函數入口
//字符串的初始化賦值和輸出
Scanner s1 = new Scanner(System.in);//獲取鍵盤輸入並賦值給s1字符串
System.out.println("請給字符串a賦值:");//輸入提示信息
String a = s1.nextLine();//定義字符串變量,並賦值爲用戶輸入的信息
Scanner s2 = new Scanner(System.in);//獲取鍵盤輸入並賦值給s2字符串
System.out.println("請給字符串b賦值:");//輸入提示信息
String b = s2.nextLine();//定義字符串變量,並賦值爲用戶輸入的信息
System.out.println("字符串a的內容爲:"+a);//輸出字符串a賦值後的內容
System.out.println("字符串a的內容爲:"+b);//輸出字符串b賦值後的內容
//將兩個字符串比較是否相同
System.out.println("兩字符串的內容是否相同? "+a.equals(b));//輸出結果信息
//System.out.println(a==b); //比較兩字符串是否同一個對象
//System.out.println(a.equals(b)); //比較兩個字符串內容是否相同
//System.out.println(a.equalsIgnoreCase(b));//比較兩個字符串(忽略大小寫)
//將兩個字符串相加合成爲一個新字符串
String c = a + b;//合併兩個字符串
System.out.println("字符串a與b合併之後的內容爲:\n"+c);//輸出合併字符串
//查找某一子字符串是否被包含在此字符串之中,如果包含,包含了多少次
Scanner s3 = new Scanner(System.in);//獲取鍵盤輸入並賦值給s3字符串
System.out.println("請輸入想要查找的字符串:");//輸入提示信息
String d = s3.nextLine();//定義字符串變量,並賦值爲用戶輸入的信息
boolean con =c.contains(d);//子字符串是否被包含在此字符串之中,包含輸出true,否則輸出false
System.out.println("子字符串是否被包含在此字符串之中:"+con);//輸出結果信息
System.out.println("包含次數爲:"+repetitions(c,d));//調用count,輸出包含次數
//把此子字符串替換爲其他的新的指定字符串。
Scanner s4 = new Scanner(System.in);//獲取鍵盤輸入並賦值給s4字符串
System.out.println("請選擇是否替換字符(串):確定(1)/拒絕(2)");//提示選擇查詢方式
int e = s4.nextInt();//定義一個int類型變量,選擇查詢方式
switch(e){//查詢方式類
case 1://查詢類型1,替換字符(串)後輸出
Scanner s5 = new Scanner(System.in);//獲取鍵盤輸入並賦值給s5字符串
System.out.println("請輸入想要替換的原字符:");//輸入提示信息
String f = s5.nextLine();//定義字符串變量,並賦值爲用戶輸入的信息
Scanner s6 = new Scanner(System.in);//獲取鍵盤輸入並賦值給s6字符串
System.out.println("請輸入想要替換的原字符:");//輸入提示信息
String g = s6.nextLine();//定義字符串變量,並賦值爲用戶輸入的信息
String z=c.replace(f,g);//將f替換爲g
System.out.println("替換前:"+c);//輸出替換前字符串信息
System.out.println("替換後:"+z);//輸出替換後字符串信息
break;//跳出
case 2://查詢類型2,不替換
System.out.println("最終的字符串內容爲:\n"+c);//輸出合併字符串
break;//跳出
default://輸入有誤項
System.out.println("該字符(串)有誤");//輸出錯誤提示
break;//跳出
}
}
public static int repetitions(String c, String d) {//創建repetitions統計出現次數
int count = 0;//創建一個計數器,統計次數
int fromIndex = 0;//創建計數器,設開始的地址
while ((fromIndex = c.indexOf(d, fromIndex)) != -1) {// 循環到沒有輸出-1時就停止循環
fromIndex = fromIndex + d.length();//子串第一次出現的位置+長度=下一次的起始位置
count++;//次數加1
}
return count;//返回值
}
}
3)執行結果
分部拆裝效果見下:
String
類常用的方法有(可到API中查看,部分前面也已講過,此處不贅述):
-
String類的下述方法能創建並返回一個新的String對象:
concat()、 replace()、substring()、 toLowerCase()、 toUpperCase()、trim()
。 -
提供查找功能的有關方法:
endsWith()、 startsWith()、 indexOf()、lastIndexOf()
。 -
提供比較功能的方法:
equals()、equalsIgnoreCase()、compareTo()。
-
其它方法:
charAt() 、length()。
參考鏈接:
https://blog.csdn.net/hacker754/article/details/78686212
https://blog.csdn.net/u014259820/article/details/79654444
https://blog.csdn.net/qq276295783/article/details/84947981
https://blog.csdn.net/wufaliang003/article/details/74931375/
https://blog.csdn.net/weixin_42014622/article/details/82988533
https://blog.csdn.net/mingzhuo_126/article/details/83653422
https://blog.csdn.net/P90X_Liyuan/article/details/79573294
https://blog.csdn.net/jiaxianggege215/article/details/78206167