Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié)
java中,截取字符串的常用方法是使用String類(lèi)的substring方法。除了substring方法,Java中還有其他方法可以用來(lái)截取字符串,雖然這些方法可能不如substring直接,但在某些情況下可能會(huì)更靈活或適合特定需求。例如:正則表達(dá)式、split方法、StringBuilder或StringBuffer類(lèi)、第三方庫(kù)Apache Commons Lang、StringTokenizer類(lèi)。
使用String類(lèi)的substring方法。
substring方法有兩個(gè)重載版本:
substring(int beginIndex): 從指定的起始索引開(kāi)始截取到字符串的末尾。
substring(int beginIndex, int endIndex): 從指定的起始索引開(kāi)始截取到指定的結(jié)束索引(不包括結(jié)束索引)。
下面是一些示例代碼,展示了如何使用這兩個(gè)方法:
public class SubstringExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 截取從索引7開(kāi)始到字符串末尾的子字符串
String substr1 = str.substring(7);
System.out.println("Substring from index 7 to end: " + substr1); // 輸出: "World!"
// 截取從索引0開(kāi)始到索引5(不包括5)的子字符串
String substr2 = str.substring(0, 5);
System.out.println("Substring from index 0 to 5: " + substr2); // 輸出: "Hello"
// 截取從索引7開(kāi)始到索引12(不包括12)的子字符串
String substr3 = str.substring(7, 12);
System.out.println("Substring from index 7 to 12: " + substr3); // 輸出: "World"
}
}詳細(xì)解釋
substring(int beginIndex):
String substr1 = str.substring(7);
從索引7開(kāi)始截取到字符串的末尾。輸出結(jié)果為"World!"。
substring(int beginIndex, int endIndex):
String substr2 = str.substring(0, 5);
從索引0開(kāi)始截取到索引5(不包括5)。
輸出結(jié)果為"Hello"。
String substr3 = str.substring(7, 12);
從索引7開(kāi)始截取到索引12(不包括12)。
輸出結(jié)果為"World"。
注意事項(xiàng)
- 索引從0開(kāi)始計(jì)數(shù)。
beginIndex必須大于等于0,且小于等于字符串的長(zhǎng)度。endIndex必須大于等于beginIndex,且小于等于字符串的長(zhǎng)度。- 如果索引超出范圍,會(huì)拋出
StringIndexOutOfBoundsException異常。
示例代碼的輸出
運(yùn)行上述代碼,輸出結(jié)果如下:
Substring from index 7 to end: World!
Substring from index 0 to 5: Hello
Substring from index 7 to 12: World
以下是一些替代方法:
除了substring方法,Java中還有其他方法可以用來(lái)截取字符串,雖然這些方法可能不如substring直接,但在某些情況下可能會(huì)更靈活或適合特定需求。
使用正則表達(dá)式
正則表達(dá)式可以用來(lái)匹配和提取字符串的特定部分。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 使用正則表達(dá)式提取"World"
Pattern pattern = Pattern.compile("World");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
String match = matcher.group();
System.out.println("Matched substring: " + match); // 輸出: "World"
}
}
}使用String的split方法
split方法可以根據(jù)指定的分隔符將字符串分割為多個(gè)子字符串,然后可以選擇需要的部分。
public class SplitExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 使用逗號(hào)和空格作為分隔符分割字符串
String[] parts = str.split(", ");
// 提取第二部分
if (parts.length > 1) {
String part = parts[1];
System.out.println("Second part: " + part); // 輸出: "World!"
}
}
}使用StringBuilder或StringBuffer
在某些情況下,你可能需要對(duì)字符串進(jìn)行更多的操作,如刪除或替換字符,可以使用StringBuilder或StringBuffer類(lèi)。
public class StringBuilderExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 創(chuàng)建一個(gè)StringBuilder對(duì)象
StringBuilder sb = new StringBuilder(str);
// 刪除從索引0到索引7(不包括7)的部分
sb.delete(0, 7);
// 將結(jié)果轉(zhuǎn)換為字符串
String result = sb.toString();
System.out.println("Resulting string: " + result); // 輸出: "World!"
}
}使用Apache Commons Lang庫(kù)
如果你可以使用第三方庫(kù),Apache Commons Lang提供了更豐富的字符串操作方法。
import org.apache.commons.lang3.StringUtils;
public class ApacheCommonsExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 使用Apache Commons Lang庫(kù)的substring方法
String substr = StringUtils.substring(str, 7, 12);
System.out.println("Substring using Apache Commons: " + substr); // 輸出: "World"
}
}使用StringTokenizer
StringTokenizer類(lèi)可以用來(lái)分割字符串,盡管它現(xiàn)在已經(jīng)不推薦使用,但在某些舊代碼中可能會(huì)見(jiàn)到。
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
String str = "Hello, World!";
// 使用逗號(hào)和空格作為分隔符
StringTokenizer tokenizer = new StringTokenizer(str, ", ");
// 跳過(guò)第一部分
if (tokenizer.hasMoreTokens()) {
tokenizer.nextToken();
}
// 提取第二部分
if (tokenizer.hasMoreTokens()) {
String part = tokenizer.nextToken();
System.out.println("Second part using StringTokenizer: " + part); // 輸出: "World!"
}
}
}字符串的截取和操作一些常見(jiàn)的場(chǎng)景和用途:
數(shù)據(jù)清洗和預(yù)處理
在處理數(shù)據(jù)時(shí),特別是從文件、數(shù)據(jù)庫(kù)或網(wǎng)絡(luò)獲取的數(shù)據(jù),常常需要對(duì)字符串進(jìn)行清洗和預(yù)處理。例如:
- 從日志文件中提取特定信息。
- 從用戶輸入中提取和驗(yàn)證數(shù)據(jù)。
- 處理和規(guī)范化文本數(shù)據(jù),如去除前后空格、轉(zhuǎn)換大小寫(xiě)等。
搜索和替換
字符串搜索和替換是非常常見(jiàn)的操作,例如:
- 在文檔中查找和替換特定的單詞或短語(yǔ)。
- 在代碼中查找并替換變量名或函數(shù)名。
- 在配置文件中更新設(shè)置值。
解析和處理
從復(fù)雜的字符串中解析出有用的信息,例如:
- 解析URL和查詢參數(shù)。
- 處理CSV或其他分隔符格式的文件。
- 解析和處理JSON或XML字符串。
安全和驗(yàn)證
在用戶輸入和數(shù)據(jù)傳輸中,字符串操作可以用于安全和驗(yàn)證,例如:
- 驗(yàn)證電子郵件地址、電話號(hào)碼等格式。
- 過(guò)濾和轉(zhuǎn)義特殊字符以防止SQL注入或XSS攻擊。
- 解析和驗(yàn)證JWT(JSON Web Tokens)等認(rèn)證信息。
示例代碼
以下是一些具體的示例,展示字符串截取和操作在不同場(chǎng)景中的應(yīng)用:
示例1:從URL中提取域名
public class URLParser {
public static void main(String[] args) {
String url = "https://www.example.com/path?query=123";
// 提取協(xié)議
String protocol = url.substring(0, url.indexOf(":"));
System.out.println("Protocol: " + protocol); // 輸出: "https"
// 提取域名
int start = url.indexOf("://") + 3;
int end = url.indexOf("/", start);
String domain = url.substring(start, end);
System.out.println("Domain: " + domain); // 輸出: "www.example.com"
}
}示例2:格式化日期字符串
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
Date date = new Date();
// 使用SimpleDateFormat格式化日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(date);
System.out.println("Formatted Date: " + formattedDate); // 輸出: 當(dāng)前日期和時(shí)間
}
}示例3:驗(yàn)證電子郵件地址
public class EmailValidator {
public static void main(String[] args) {
String email = "user@example.com";
// 使用簡(jiǎn)單的正則表達(dá)式驗(yàn)證電子郵件地址
boolean isValid = email.matches("^[A-Za-z0-9+_.-]+@(.+)$");
System.out.println("Is valid email: " + isValid); // 輸出: true
}
}示例4:解析CSV字符串
public class CSVParser {
public static void main(String[] args) {
String csv = "John,Doe,30,New York";
// 使用split方法解析CSV字符串
String[] parts = csv.split(",");
for (String part : parts) {
System.out.println(part);
}
// 輸出:
// John
// Doe
// 30
// New York
}
}到此這篇關(guān)于Java中字符串截取方法詳解及實(shí)際應(yīng)用的文章就介紹到這了,更多相關(guān)java字符串截取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?cloud負(fù)載均衡@LoadBalanced?&?LoadBalancerClient
由于Spring?cloud2020之后移除了Ribbon,直接使用Spring?Cloud?LoadBalancer作為客戶端負(fù)載均衡組件,我們討論Spring負(fù)載均衡以Spring?Cloud2020之后版本為主,學(xué)習(xí)Spring?Cloud?LoadBalance2023-11-11
SpringBoot全局配置long轉(zhuǎn)String丟失精度問(wèn)題解決方案
這篇文章主要介紹了SpringBoot全局配置long轉(zhuǎn)String丟失精度問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Mybatis-plus 雙主鍵的實(shí)現(xiàn)示例
本文主要介紹了Mybatis-plus 雙主鍵的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
SpringBoot項(xiàng)目中訪問(wèn)HTML頁(yè)面的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot項(xiàng)目中訪問(wèn)HTML頁(yè)面的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Java使用路徑通配符加載Resource與profiles配置使用詳解
這篇文章主要介紹了Java使用路徑通配符加載Resource與profiles配置使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
java求數(shù)組元素重復(fù)次數(shù)和java字符串比較大小示例
這篇文章主要介紹了java求數(shù)組元素重復(fù)次數(shù)和java字符串比較大小示例,需要的朋友可以參考下2014-04-04
SpringBoot+MybatisPlus+代碼生成器整合示例
這篇文章主要介紹了SpringBoot+MybatisPlus+代碼生成器整合示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Kafka的安裝及接入SpringBoot的詳細(xì)過(guò)程
Kafka 是一種高性能、分布式的消息隊(duì)列系統(tǒng),最初由 LinkedIn 公司開(kāi)發(fā),并于2011年成為 Apache 頂級(jí)項(xiàng)目,這篇文章主要介紹了Kafka的安裝及接入SpringBoot,需要的朋友可以參考下2024-05-05
Java如何使用Agent和ASM在字節(jié)碼層面實(shí)現(xiàn)方法攔截
Agent是一種運(yùn)行在 Java 虛擬機(jī) (JVM) 上的特殊程序,ASM是一個(gè)輕量級(jí)的 Java 字節(jié)碼編輯和分析框架,本文為大家介紹了如何利用他們?cè)谧止?jié)碼層面實(shí)現(xiàn)方法攔截,感興趣的可以了解一下2023-05-05

