成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

沒想到字符串分割還能這樣玩

開發 前端
字符串分割在我們工作中很常用,但大部分情況我們只會使用 String#split , 看到其他的一些情況,是不是感覺有點有趣,沒想到字符串分割還能這樣玩。

大家好,我是指北君。

我們寫代碼的時候,經常會遇到這樣一個場景,那就是分割字符串。比如說把一個字符串分成N個,或者說按照N個字符分割。

我們今天就來看看怎么每隔N個字符分割字符串。首先我們就使用 JDK 中內置的 String#split 來分割。

使用 String#split 方法

String 類中 split 方法,是我們平常處理字符串分割最常用的方法之一,它可以根據給定的分隔符或正則表達式將一個字符串分割成多個部分。

我們來看個例子:

public static List<String> usingSplitMethod(String text, int n) {
String[] results = text.split("(?<=\\G.{" + n + "})");

return Arrays.asList(results);
}

我們通過使用正則表達式 "(?<=\\G.{" + n + "})"來分割字符串,其中表達式中的 n 表示字符的長度。

我們可以通過以下測試用例代碼驗證這個正則是否有效。

public class SplitStringEveryNthCharUnitTest {

public static final String TEXT = "abcdefgh123456";

@Test
public void givenString_whenUsingSplit_thenSplit() {
List<String> results = SplitStringEveryNthChar.usingSplitMethod(TEXT, 3);

assertThat(results, contains("abc", "def", "gh1", "234", "56"));
}
}

使用 String#substring 方法

String#substring 一般情況我們都是用于截取字符串使用的,這里我們也是可以用來處理字符串的分割,只要循環就行。

public static List<String> usingSubstringMethod(String text, int n) {
List<String> results = new ArrayList<>();
int length = text.length();

for (int i = 0; i < length; i += n) {
results.add(text.substring(i, Math.min(length, i + n)));
}

return results;
}

我們通過以下測試用例代碼來驗證。

@Test
public void givenString_whenUsingSubstring_thenSplit() {
List<String> results = SplitStringEveryNthChar.usingSubstringMethod("abcdefgh123456", 4);

assertThat(results, contains("abcd", "efgh", "1234", "56"));
}

使用 Pattern 類

Pattern 類通常來說,我們是用于處理正則表達式,做一些match使用,正如第一種 String#split 方法所見,正則表達式也可以用于分割字符串。這里就展示一下,使用Pattern類來處理字符串分割。

public static List<String> usingPattern(String text, int n) {
return Pattern.compile(".{1," + n + "}")
.matcher(text)
.results()
.map(MatchResult::group)
.collect(Collectors.toList());
}

我們使用 .{1,n}構建了一個 Pattern 對象,它能個匹配 1 到 n 個字符, 使用下面的測試用例簡單測試一下

@Test
public void givenString_whenUsingPattern_thenSplit() {
List<String> results = SplitStringEveryNthChar.usingPattern("abcdefgh123456", 5);

assertThat(results, contains("abcde", "fgh12", "3456"));
}

使用 Guava

到現在為止,我們已經學了幾種通過 JDK 相關 API 完成這個操作的方法,下面我們來看看怎么使用 Guava 來實現這個小功能。

public static List<String> usingGuava(String text, int n) {
Iterable<String> parts = Splitter.fixedLength(n).split(text);

return ImmutableList.copyOf(parts);
}

Guava 通過 Splitter 類可以很簡單的針對我們的這個使用場景,進行字符串分割。這個 fixedLength() 方法為后續的分割提供了固定的分割長度。

我們通過下面的測試用例來測試一下。

@Test
public void givenString_whenUsingGuava_thenSplit() {
List<String> results = SplitStringEveryNthChar.usingGuava("abcdefgh123456", 6);

assertThat(results, contains("abcdef", "gh1234", "56"));
}

總結

字符串分割在我們工作中很常用,但大部分情況我們只會使用 String#split , 看到其他的一些情況,是不是感覺有點有趣,沒想到字符串分割還能這樣玩。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2020-08-14 08:19:25

Shell命令行數據

2021-01-27 18:13:35

日志nginx信息

2018-01-26 23:23:23

JDBC MySQL數據庫

2017-02-09 17:00:00

iOSSwiftKVC

2019-03-08 10:08:41

網絡程序猿代碼

2018-06-27 14:23:38

機器學習人工智能入門方法

2018-05-02 09:38:02

程序員代碼互聯網

2020-11-16 13:38:31

PostMessage

2017-12-26 15:41:26

2012-12-28 13:47:36

Raspberry PGeek

2022-01-05 17:13:28

監控HTTPS網站

2021-11-29 05:37:24

Windows Def操作系統微軟

2009-04-28 07:48:29

蓋茨打工基金會

2021-07-28 06:10:47

拖拽設計器 transmat

2021-09-05 07:55:37

前端Emoji 表情

2018-12-26 09:44:02

分布式緩存本地緩存

2019-08-19 09:21:36

程序員Bug代碼

2021-08-12 06:52:02

谷歌面試ArrayList

2022-03-21 08:55:53

RocketMQ客戶端過濾機制

2023-10-31 12:29:25

模型訓練
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区久久久 | 狠狠的干| 午夜理伦三级理论三级在线观看 | 毛片一区二区 | 日本小电影网站 | 欧美亚洲激情 | av免费观看在线 | aa级毛片毛片免费观看久 | 国产乱码精品一区二区三区av | 九九热免费视频在线观看 | av性色全交蜜桃成熟时 | 日产精品久久久一区二区福利 | 成人免费一区二区 | v片网站 | 黄色网页在线观看 | www.国产91| 成人国产在线视频 | 大陆一级毛片免费视频观看 | 一区二区成人 | 日本在线中文 | 日韩一区不卡 | 久草在线青青草 | 91精品中文字幕一区二区三区 | 日韩欧美一区二区三区 | av在线电影网站 | 日日草天天干 | 高清成人免费视频 | 国产一级特黄视频 | 久久久久9999亚洲精品 | 国产精品成人69xxx免费视频 | 久久99视频 | 特黄色毛片| 久久久久久久综合 | 福利av在线 | 久久久久综合 | 国产精品成人国产乱一区 | 成年人免费看的视频 | 日本不卡一区 | 欧洲一级毛片 | 日韩精品一区二区三区在线 | 国产欧美日韩一区二区三区在线观看 |