2013-07-01 34 views
1

我正在编写以下程序,将字符与字符串分开并将其分配给数组。从字符串中拆分单个字符

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 

我发现了一个空字符串作为该阵列的第一个元素。我期待输出没有空字符串,字符数组的长度是5而不是6.为什么在分割这个字符串后出现空字符?

回答

7

您可以使用String#toCharArray()方法:

String str = "hello"; 
char[] arr = str.toCharArray(); 

至于你的问题,当你各执一个空字符串,你会得到的第一个元素为空字符串,因为,你的字符串的开头空字符串,并且在每个字符之后,还有一个空字符串。

因此,第一次分割发生在第一个字符之前。

h e l l o 
^^^^^^
"Split location" 

拖尾空字符串被丢弃,如在documentation指定:因此

尾随空字符串中不包括所得到的阵列英寸

4

您是否尝试过String类的toCharArray()方法。

String""分开的问题是""与字符串中的第一个字符匹配,因此您会得到一个空字符。

验证此声明。你可以试试str.indexOf("")。这会给你一个值0.如果参数不作为子字符串出现,则返回-1,根据documentation

1

像其他人一样注意到,使用toCharArray()是执行此类操作的首选方法。由于OP想要知道为什么在使用split("")时第一个字符串为空,这是因为在解析第一个字符之前,空字符串是第一个匹配。根据documentation,只有尾部空字符串被忽略,而不是前导空字符串。

为解决此问题,您可以使用negative look behind。因此,要使用拆分并忽略第一个空字符串,您的正则表达式应该是:

str.split("(?<!^)")