Java如何優(yōu)雅實現數組切片和拼接操作
一、字符串切片再拼接
某次的業(yè)務開發(fā)中,需要對字符串進行分割(split)并提取其中的某些部分以進行組合。然而,我在Java標準庫中并沒有找到一步到位的API來直接支持這種操作。希望在未來的幾年里,Java能夠在這方面優(yōu)化其數組操作的API,使得此類常見操作更加便捷。
List<String> linesList = Arrays.stream(content.split("\n")).collect(Collectors.toList()); String line = String.join("", linesList.subList(index1, index2));
二、集合切片再拼接
Java對于數組的切片操作,沒有直接提供類似于 JavaScript 中 slice() 方法那樣便捷的功能,只能利用 Arrays.copyOfRange() 方法來實現數組的切片。
int[] originalArray = {1, 2, 3, 4, 5, 6}; int start = 1; // 起始索引(包含) int end = 4; // 結束索引(不包含) // 使用 Arrays.copyOfRange() 進行切片 int[] slicedArray = Arrays.copyOfRange(originalArray, start, end); // slicedArray 現在等于 {2, 3, 4} System.out.println(Arrays.toString(slicedArray));
再使用 Stream API 進行拼接
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; // 對數組進行切片 Integer[] slice1 = Arrays.copyOfRange(array1, start1, end1); Integer[] slice2 = Arrays.copyOfRange(array2, start2, end2); // 使用 Stream API 進行拼接 Object[] array = Stream.concat(Arrays.stream(slice1), Arrays.stream(slice2)) .toArray(); // result 現在等于 {2, 3, 8, 9} Arrays.stream(array).forEach(System.out::println);
Stream.concat() 方法會一次性加載所有元素到內存中,因此如果要拼接的數組非常大,可能會有性能和內存消耗方面的考量。在處理大規(guī)模數據時,可能需要考慮其他更高效的數據結構或處理方式。
附:Java8中的字符串轉數組再通過指定符號拼接
1.字符串轉換字符串數組
String[] nameArr = StringUtils.tokenizeToStringArray(nameAttr, MULTI_VALUE_ATTRIBUTE_DELIMITERS); // nameAttr="made,in;china,;qqq,.aaa" ,MULTI_VALUE_ATTRIBUTE_DELIMITERS=",;."
將字符串按照指定的字符轉換成String[]數組,如字符串中不包含指定字符,則將整個字符串放進數組。如指定字符有多個,是分別按所有可能出現的字符來切割的。 字符串: "made,in;china,;qqq,.aaa" 指定字符: ",;." 返回數組:[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.字符串數組通過某符號連接
Collectors.joining 收集器 支持靈活的參數配置,可以指定字符串連接時的 分隔符,前綴 和 后綴 字符串
Stream<String> stream = Arrays.stream(nameArr);
String result = stream.collect(Collectors.joining("/", "[", "]")); System.out.println(result); // 輸出字符串 [made/in/china]
總結
到此這篇關于Java如何優(yōu)雅實現數組切片和拼接操作的文章就介紹到這了,更多相關Java數組切片和拼接內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Spring框架由ConditionalOnMissingBean注解引發(fā)的問題
這篇文章主要介紹了基于Spring框架由ConditionalOnMissingBean注解引發(fā)的問題,具有很好2023-11-11springboot?max-http-header-size最大長度的那些事及JVM調優(yōu)方式
這篇文章主要介紹了springboot?max-http-header-size最大長度的那些事及JVM調優(yōu)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09