Java如何優(yōu)雅實(shí)現(xiàn)數(shù)組切片和拼接操作
一、字符串切片再拼接
某次的業(yè)務(wù)開發(fā)中,需要對字符串進(jìn)行分割(split)并提取其中的某些部分以進(jìn)行組合。然而,我在Java標(biāo)準(zhǔn)庫中并沒有找到一步到位的API來直接支持這種操作。希望在未來的幾年里,Java能夠在這方面優(yōu)化其數(shù)組操作的API,使得此類常見操作更加便捷。
List<String> linesList = Arrays.stream(content.split("\n")).collect(Collectors.toList()); String line = String.join("", linesList.subList(index1, index2));
二、集合切片再拼接
Java對于數(shù)組的切片操作,沒有直接提供類似于 JavaScript 中 slice() 方法那樣便捷的功能,只能利用 Arrays.copyOfRange() 方法來實(shí)現(xiàn)數(shù)組的切片。
int[] originalArray = {1, 2, 3, 4, 5, 6}; int start = 1; // 起始索引(包含) int end = 4; // 結(jié)束索引(不包含) // 使用 Arrays.copyOfRange() 進(jìn)行切片 int[] slicedArray = Arrays.copyOfRange(originalArray, start, end); // slicedArray 現(xiàn)在等于 {2, 3, 4} System.out.println(Arrays.toString(slicedArray));
再使用 Stream API 進(jìn)行拼接
Integer[] array1 = {1, 2, 3, 4, 5}; Integer[] array2 = {6, 7, 8, 9, 10}; // 定義切片范圍 int start1 = 1; int end1 = 3; int start2 = 2; int end2 = 4; // 對數(shù)組進(jìn)行切片 Integer[] slice1 = Arrays.copyOfRange(array1, start1, end1); Integer[] slice2 = Arrays.copyOfRange(array2, start2, end2); // 使用 Stream API 進(jìn)行拼接 Object[] array = Stream.concat(Arrays.stream(slice1), Arrays.stream(slice2)) .toArray(); // result 現(xiàn)在等于 {2, 3, 8, 9} Arrays.stream(array).forEach(System.out::println);
Stream.concat() 方法會一次性加載所有元素到內(nèi)存中,因此如果要拼接的數(shù)組非常大,可能會有性能和內(nèi)存消耗方面的考量。在處理大規(guī)模數(shù)據(jù)時(shí),可能需要考慮其他更高效的數(shù)據(jù)結(jié)構(gòu)或處理方式。
附:Java8中的字符串轉(zhuǎn)數(shù)組再通過指定符號拼接
1.字符串轉(zhuǎn)換字符串?dāng)?shù)組
String[] nameArr = StringUtils.tokenizeToStringArray(nameAttr, MULTI_VALUE_ATTRIBUTE_DELIMITERS); // nameAttr="made,in;china,;qqq,.aaa" ,MULTI_VALUE_ATTRIBUTE_DELIMITERS=",;."
將字符串按照指定的字符轉(zhuǎn)換成String[]數(shù)組,如字符串中不包含指定字符,則將整個(gè)字符串放進(jìn)數(shù)組。如指定字符有多個(gè),是分別按所有可能出現(xiàn)的字符來切割的。 字符串: "made,in;china,;qqq,.aaa" 指定字符: ",;." 返回?cái)?shù)組:[made, in, china, qqq, aaa]
/** * Tokenize the given {@code String} into a {@code String} array via a * {@link StringTokenizer}. * <p>Trims tokens and omits empty tokens. * <p>The given {@code delimiters} string can consist of any number of * delimiter characters. Each of those characters can be used to separate * tokens. A delimiter is always a single character; for multi-character * delimiters, consider using {@link #delimitedListToStringArray}. * @param str the {@code String} to tokenize (potentially {@code null} or empty) * @param delimiters the delimiter characters, assembled as a {@code String} * (each of the characters is individually considered as a delimiter) * @return an array of the tokens * @see java.util.StringTokenizer * @see String#trim() * @see #delimitedListToStringArray */ public static String[] tokenizeToStringArray(@Nullable String str, String delimiters) { return tokenizeToStringArray(str, delimiters, true, true); }
2.字符串?dāng)?shù)組通過某符號連接
Collectors.joining 收集器 支持靈活的參數(shù)配置,可以指定字符串連接時(shí)的 分隔符,前綴 和 后綴 字符串
Stream<String> stream = Arrays.stream(nameArr);
String result = stream.collect(Collectors.joining("/", "[", "]")); System.out.println(result); // 輸出字符串 [made/in/china]
總結(jié)
到此這篇關(guān)于Java如何優(yōu)雅實(shí)現(xiàn)數(shù)組切片和拼接操作的文章就介紹到這了,更多相關(guān)Java數(shù)組切片和拼接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot的調(diào)度服務(wù)與異步服務(wù)使用詳解
本文主要介紹了Java的ScheduledExecutorService接口和Spring Boot中如何使用調(diào)度線程池,包括核心參數(shù)、創(chuàng)建方式、自定義線程池、Cron表達(dá)式,以及如何在Spring Boot中配置和使用異步任務(wù),此外,還討論了如何模擬系統(tǒng)繁忙和調(diào)整異步線程池的拒絕策略2025-02-02Java中數(shù)據(jù)庫常用的兩把鎖之樂觀鎖和悲觀鎖
這篇文章主要介紹了數(shù)據(jù)庫常用的兩把鎖之樂觀鎖和悲觀鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07基于Spring框架由ConditionalOnMissingBean注解引發(fā)的問題
這篇文章主要介紹了基于Spring框架由ConditionalOnMissingBean注解引發(fā)的問題,具有很好2023-11-11springboot?max-http-header-size最大長度的那些事及JVM調(diào)優(yōu)方式
這篇文章主要介紹了springboot?max-http-header-size最大長度的那些事及JVM調(diào)優(yōu)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09sprinboot項(xiàng)目啟動一半到圖形化界面卡住了的解決
這篇文章主要介紹了sprinboot項(xiàng)目啟動一半到圖形化界面卡住了的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10