如何获取固定长度(含默认值填充)的逗号分隔字符串拆分结果?
解决逗号分隔字符串拆分后固定长度(补null/截断)的需求
嘿,这个需求我之前做项目的时候刚好遇到过!不用自己写一堆判断逻辑,直接用现成的成熟工具类就能搞定,给你推荐两个常用的方案:
方案一:Apache Commons Lang 3 (推荐,代码更简洁)
Apache Commons Lang 里的 ArrayUtils.pad() 方法完美适配你的需求——它会自动把拆分后的数组调整到指定长度:如果原数组长度不够,用你指定的默认值(这里是null)填充;如果原数组太长,直接截断到目标长度。
代码示例:
import org.apache.commons.lang3.ArrayUtils; public class SplitExample { public static void main(String[] args) { // 测试用例1:不足5个元素 String input1 = "a,b,c"; String[] splitArr1 = input1.split(","); String[] result1 = ArrayUtils.pad(splitArr1, 5, null); // result1 结果:["a", "b", "c", null, null] // 测试用例2:超过5个元素 String input2 = "a,b,c,d,e,f,g"; String[] splitArr2 = input2.split(","); String[] result2 = ArrayUtils.pad(splitArr2, 5, null); // result2 结果:["a", "b", "c", "d", "e"] // 测试用例3:刚好5个元素 String input3 = "a,b,c,d,e"; String[] splitArr3 = input3.split(","); String[] result3 = ArrayUtils.pad(splitArr3, 5, null); // result3 结果:["a", "b", "c", "d", "e"] } }
依赖导入(Maven):
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.14.0</version> <!-- 建议使用最新稳定版本 --> </dependency>
方案二:Guava (Google出品,集合操作更灵活)
如果你项目里已经在用Guava,也可以用它的Splitter结合集合工具类来实现:先把字符串拆分成List,然后截断到前5个元素,再用padEnd()补null到5个长度。
代码示例:
import com.google.common.base.Splitter; import com.google.common.collect.Lists; import java.util.List; public class SplitExampleGuava { public static void main(String[] args) { // 测试用例1:不足5个元素 String input1 = "x,y"; List<String> splitList1 = Splitter.on(",").splitToList(input1); List<String> result1 = Lists.padEnd(Lists.truncate(splitList1, 0, 5), 5, null); // result1 结果:["x", "y", null, null, null] // 测试用例2:超过5个元素 String input2 = "x,y,z,1,2,3"; List<String> splitList2 = Splitter.on(",").splitToList(input2); List<String> result2 = Lists.padEnd(Lists.truncate(splitList2, 0, 5), 5, null); // result2 结果:["x", "y", "z", "1", "2"] } }
依赖导入(Maven):
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.3-jre</version> <!-- 建议使用最新稳定版本 --> </dependency>
这两个工具类都是业界广泛使用的,稳定性和兼容性都没问题,完全不用自己写循环判断长度、填充元素的代码,直接调用就好~
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

