Java如何拆分指定格式字符串,分别存储名称数组与对应选项字符数组
Java场景下固定格式字符串拆分转双数组实现
场景说明
- 待处理字符串格式固定为「名称 选项,名称 选项」,需要将拆分结果分别存入两个数组:
- 所有名称存入
String类型的name数组 - 每个名称对应的尾随单字符选项存入
char类型的choice数组
- 所有名称存入
- 现有基础能力:已经掌握通过逗号拆分原始字符串、拿到单个「名称+选项」子串的方法,暂未明确单个子串内的名称与选项提取逻辑
- 对照示例:
- 源字符串:
String ls = "Home A,Sweet B,Smile C,Mind D" - 预期name数组:
{"Home", "Sweet", "Smile", "Mind"} - 预期choice数组:
{'A', 'B', 'C', 'D'}
- 源字符串:
可靠实现逻辑
单个子串的核心特征是选项一定是出现在字符串最末尾的单个字符,和前面的名称之间用空格分隔,基于这个特征的提取方案不需要假设名称本身不含空格,鲁棒性更高:
- 对拆分得到的单个子串做前后空白裁剪,避免多余空格干扰
- 定位子串内最后一个空格的位置,以此作为名称和选项的分割点:
- 分割点之前的所有文本,就是完整的名称
- 分割点之后的内容裁剪空白后取第一个字符,就是对应的选项值
- 循环遍历所有拆分得到的子串,依次填充两个目标数组即可
参考代码实现
public class SplitDemo { public static void main(String[] args) { String ls = "Home A,Sweet B,Smile C,Mind D"; // 第一步:按逗号拆分原始字符串(已掌握的基础逻辑) String[] itemSegments = ls.split(","); String[] nameArray = new String[itemSegments.length]; char[] choiceArray = new char[itemSegments.length]; for (int i = 0; i < itemSegments.length; i++) { String segment = itemSegments[i].trim(); // 定位最后一个空格的位置作为分割点 int splitIndex = segment.lastIndexOf(' '); // 提取名称 nameArray[i] = segment.substring(0, splitIndex).trim(); // 提取单字符选项 choiceArray[i] = segment.substring(splitIndex + 1).trim().charAt(0); } } }
这种拆分逻辑不需要提前假设名称不含空格,相比直接按单个空格拆分的方式,对格式的适配性更强,不会因为名称本身携带空格出现提取错误。
内容的提问来源于stack exchange,提问作者Chung Lee
相关产品推荐
相关产品推荐

