从字符串中拆分单个字符

时间:2013-07-01 19:01:30

标签: java string

我正在编写以下程序来将字符与字符串分开并将其分配给数组。

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.为什么在分割此字符串后出现空字符?

3 个答案:

答案 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("(?<!^)")