我正在编写以下程序来将字符与字符串分开并将其分配给数组。
public class Str {
public static void main(String[] args) {
String str = "hello";
String[] chars = str.split("");
for (int i = 0; i < chars.length; i++) {
System.out.println(i + ":" + chars[i]);
}
}
}
我得到的输出是:
0:
1:h
2:e
3:l
4:l
5:o
我得到一个空字符串作为数组的第一个元素。我期望输出没有空字符串,并且chars数组的长度为5而不是6.为什么在分割此字符串后出现空字符?
答案 0 :(得分:7)
您可以使用String#toCharArray()
方法:
String str = "hello";
char[] arr = str.toCharArray();
至于你的问题,当你拆分一个空字符串时,你会得到第一个元素为空字符串,因为,你的字符串以空字符串开头,并且在每个字符之后也有一个空字符串。
因此,第一次分裂发生在第一个字符之前。
h e l l o
^ ^ ^ ^ ^ ^
"Split location"
将丢弃尾随的空字符串,如documentation:
中所述因此,结尾的空字符串不包含在结果数组中。
答案 1 :(得分:4)
您是否尝试过String
课程中的toCharArray()
方法。
将String
与此""
分开的问题是""
与字符串中的第一个字符匹配,因此您会得到一个空字符。
验证此声明。你可以试试str.indexOf("")
。这将为您提供值0.如果参数不作为子字符串出现,则根据documentation返回-1。
答案 2 :(得分:1)
与其他人一样,使用toCharArray()
是执行此类操作的首选方法。由于OP在使用split("")
时想要知道第一个字符串为空的原因,因为即使在解析第一个字符之前,空字符串也是第一个匹配。根据{{3}},只会忽略尾随空字符串而不是前导空字符串。
要解决此问题,您可以使用documentation。所以,要使用split并忽略你的正则表达式应该是第一个空字符串:
str.split("(?<!^)")