Java 切割字符串的幾種方式集合
Java 切割字符串的幾種方式
//以data 為案例參數(shù)。 String data = "2019-01-08 21:55 136 \n2019-01-08 22:00 86 \n2019-01-08 22:04 136 \n2019-01-08 22:09 86 \n2019-01-08 22:12 136 \n2019-01-14 10:49 86 \n";
已下排名按效率高低,如果有疑問(wèn)自己可以設(shè)置時(shí)間戳,自己測(cè)試吧。
1、StringTokenizer切割
是java.util中的一個(gè)類,包含的api有:

其中,countTokens為length;nextToken可以獲取它的下一個(gè)字符串,其中delim為分隔符。
2、..split("*")分割
最方便,運(yùn)用最多的,不解釋。
String[] split = data.split("\n");
if (split != null && split.length != 0) {
for (int i = 0; i < split.length-1; i++) {
String[] split1 = split[i].split(":");
···
}
}
3、調(diào)用String自己的api subString()
運(yùn)用2的代碼塊
String[] split = data.split("\n");
if (split != null && split.length != 0) {
for (int i = 0; i < split.length-1; i++) {
System.out.println(split[i]);
String time = split[i].substring(0, 16);//前半部分 16為index
System.out.println(time);
String num = split[i].substring(17);//剩余部分 index +2;
System.out.println(num);
}
}
輸出結(jié)果:
2019-01-08 21:55 136
2019-01-08 21:55
136
2019-01-08 22:00 86
2019-01-08 22:00
86
2019-01-08 22:04 136
2019-01-08 22:04
136
2019-01-08 22:09 86
2019-01-08 22:09
86
2019-01-08 22:12 136
2019-01-08 22:12
136
其中上面的split[i].substring(0, 15);15是我字符串我這邊功能需要寫死了的,你可以通過(guò)indexOf(int ch)獲取位置。
正則獲取時(shí)間,然后.replaceAll(String regex,String replacement)那時(shí)間用” “代替,剩下的字符串就是時(shí)間以外的字符串了。
java優(yōu)雅的切割字符串
切割字符串
分隔字符串是java中常用的操作,String的split方法可以進(jìn)行字符串切割操作,然而日常使用卻僅僅限于str.split("-"),其中“-”為分隔符。其實(shí)split方法很強(qiáng)大,有更優(yōu)雅的方式去切割字符串
使用方法
public String[] split(String regex)
其中regex代表正則表達(dá)式分隔符,我們平時(shí)使用單個(gè)字符作為分隔符,其實(shí)可以看做是特殊的正則表達(dá)式,特殊之處在于這種表達(dá)式在匹配自身,如"-"只匹配"-",示例如下:
String string = "86-15003455666";
String[] parts = string.split("-");
String part1 = parts[0]; // 86
String part2 = parts[1]; // 15003455666
split還有另一種用法
public String[] split(String regex,int limit)
regex指的是正則表達(dá)式分隔符,limit值的是分隔的份數(shù),如:
String string = "004-556-42";
String[] parts = string.split("-", 2); // 限定分割兩份
String part1 = parts[0]; // 004
String part2 = parts[1]; // 556-42
在某些場(chǎng)景下,我們可能想要在結(jié)果中保留分隔符,這也是可以做到的,設(shè)置分隔符與分割后的左側(cè)結(jié)果相連
String string = "86-15003455666";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 86-
String part2 = parts[1]; // 15003455666
設(shè)置分隔符與分割后右側(cè)的結(jié)果相連:
String string = "86-15003455666";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 86-
String part2 = parts[1]; // 15003455666
所以說(shuō)要妙用正則表達(dá)式,代碼示例:
//\d代表數(shù)字,+代表出現(xiàn)一次或多次。所以(\\d+)-(\\d+)匹配用"-"相連的兩個(gè)數(shù)字串
// Pattern 對(duì)象是正則表達(dá)式的編譯表示
private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");
public static void checkString(String s)
{
// Matcher對(duì)象對(duì)輸入字符串進(jìn)行解釋和匹配操作
Matcher m = twopart.matcher(s);
if (m.matches()) {
//m.group(1) 和 m.group(2) 存儲(chǔ)分割后的子串
System.out.println(s + " matches; first part is " + m.group(1) +
", second part is " + m.group(2) + ".");
} else {
System.out.println(s + " does not match.");
}
}
public static void main(String[] args) {
checkString("123-4567"); // 匹配
checkString("s-tar"); // 字母序列,不匹配
checkString("123-"); // "-"右側(cè)的數(shù)字串為空,不匹配
checkString("-4567"); // "-"左側(cè)的數(shù)字串為空,不匹配
checkString("123-4567-890"); // 存在兩個(gè)"-",不匹配
}
運(yùn)行結(jié)果:
123-4567 matches; first part is 123, second part is 4567.
s-tar does not match.
123- does not match.
-4567 does not match.
123-4567-890 does not match.
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何讀取properties或yml文件數(shù)據(jù)并匹配
這篇文章主要介紹了如何讀取properties或yml文件數(shù)據(jù)并匹配方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
spring boot 使用Aop通知打印控制器請(qǐng)求報(bào)文和返回報(bào)文問(wèn)題
這篇文章主要介紹了spring-boot 使用Aop通知打印控制器請(qǐng)求報(bào)文和返回報(bào)文,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
Java線程中的用戶態(tài)和內(nèi)核態(tài)解讀
這篇文章主要介紹了Java線程中的用戶態(tài)和內(nèi)核態(tài)解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
java POI 如何實(shí)現(xiàn)Excel單元格內(nèi)容換行
這篇文章主要介紹了java POI 如何實(shí)現(xiàn)Excel單元格內(nèi)容換行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
詳解Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式
在開發(fā)的過(guò)程中,很多業(yè)務(wù)場(chǎng)景需要一個(gè)樹形結(jié)構(gòu)的結(jié)果集進(jìn)行前端展示,也可以理解為是一個(gè)無(wú)限父子結(jié)構(gòu),常見的有報(bào)表指標(biāo)結(jié)構(gòu)、菜單結(jié)構(gòu)等,這篇文章主要介紹了Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式,需要的朋友可以參考下2022-10-10
Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹
這篇文章主要介紹了Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

