Java正则分割咨询:仅移除单个空白符的实现方法
按单个分隔空白符分割并保留多余空白的实现方案
一、正则表达式实现
完全可以用正则实现你的需求,核心是通过正向零宽断言精准定位需要移除的分隔空白符。
直接使用下面的代码即可:
String sentence = "this is a whitespace and I want to split it"; String[] parts = sentence.split("\\s(?=\\S)");
正则说明
\\s:匹配任意空白字符(如果只想匹配普通空格,替换成即可)(?=\\S):正向零宽断言,确保当前匹配的空白符后面紧跟非空白字符(\\S是空白符的取反)
这个正则只会把那些衔接非空白内容的空白符作为分隔符移除,连续空白中只有最后一个符合条件的会被去掉,其余空白会保留在前面的元素里,正好得到你想要的结果:["this", "is", "a", "whitespace ", "and", "I", "want", "to", "split", "it"]
二、非正则的手动实现方案
如果对正则不太熟悉,也可以手动遍历字符串处理:
String sentence = "this is a whitespace and I want to split it"; List<String> partsList = new ArrayList<>(); StringBuilder current = new StringBuilder(); for (int i = 0; i < sentence.length(); i++) { char c = sentence.charAt(i); if (!Character.isWhitespace(c)) { current.append(c); } else { // 检查下一个字符是否为非空白,判断当前空白是否是分隔符 if (i + 1 < sentence.length() && !Character.isWhitespace(sentence.charAt(i + 1))) { partsList.add(current.toString()); current.setLength(0); } else { // 非分隔空白,直接保留 current.append(c); } } } // 加入最后一段内容 if (current.length() > 0) { partsList.add(current.toString()); } String[] parts = partsList.toArray(new String[0]);
这个逻辑是逐字符遍历,遇到非空白就追加到当前元素;遇到空白时,判断下一个字符是否为非空白——如果是,就把当前元素存入列表并重置,否则直接保留该空白,最终也能得到目标结果。
内容的提问来源于stack exchange,提问作者stneric
相关产品推荐
相关产品推荐

