You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中动态输入字符串split("")拆分出现空串的问题

关于Android Studio中字符串拆分开头空串的问题解答

嘿,我之前在做Android项目时也遇到过一模一样的问题,来给你理清楚原因和靠谱的解决办法,不用被迫从索引1开始遍历~

为什么会出现开头的空串?

这个问题本质是Java版本里String.split()的实现差异搞的鬼:

  • 在Java 8及更早版本(Android的ART runtime很多时候是兼容Java 8的),当你用split("")拆分非空字符串时,它会把字符串最开头的「空分隔位置」也当成一个元素返回,所以就出现了你看到的{"", "a", "b", "c", "D"}这种结果。
  • 你说手动设置key时结果正常,大概率是你手动测试的环境(比如本地Java 9+的IDE运行)用了更新的split()实现——Java 9之后修复了这个问题,split("")拆分非空字符串时不会再生成开头的空串。

当然也有极小概率是模拟器输入的字符串藏了看不见的空白字符(比如零宽空格),但结合你手动设置正常的情况,这个可能性很低,主要还是split()的版本实现差异导致的。

解决办法(不用跳过索引1)

给你几个实用的方案,按需选:

方案1:用toCharArray()替代split("")(最推荐)

这是最直接也最可靠的方式,直接把字符串转成字符数组,完全不会有空串问题,而且所有Android版本都支持:

char[] keyChars = key.toCharArray();
// 遍历处理每个字符
for (char c : keyChars) {
    // 比如打印字符
    Log.d("KeyChar", String.valueOf(c));
}

方案2:用正则split("(?!^)")拆分

这个正则的意思是「只在非开头的位置拆分空串」,这样就能避开开头的空元素,Java 8里也能用:

String[] keys = key.split("(?!^)");
// 此时keys就是{"a", "b", "c", "D"}

方案3:用流过滤空串(Android API 26+可用)

如果你的项目适配的是Android 8.0及以上,可以用Java流来过滤掉拆分出来的空串:

import java.util.regex.Pattern;
import java.util.stream.Collectors;

String[] keys = Pattern.compile("")
                       .splitAsStream(key)
                       .filter(s -> !s.isEmpty())
                       .toArray(String[]::new);

总结

优先选toCharArray(),简单高效还没兼容性问题;如果必须要字符串数组,split("(?!^)")是最简洁的正则方案,不用额外处理。

内容的提问来源于stack exchange,提问作者Mona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:48:54