我试图将一个包含10个数字和(可能)字母的字符串分开并将它们放入数组中。我知道最好的方法是使用Java提供的.split()函数。我通常不会遇到问题。但是,我现在正在创建一个程序中遇到麻烦。如下面的代码所示,我试图在每个字符处拆分字符串。因此,数组的长度应为10.但是,.split("")函数将字符串的开头计为空格。这导致程序的其余部分出现问题,因为该数组的索引中没有元素。我怎样才能阻止这种情况发生?
String input = "123456789x";
String[] inputArr = input.split("");
System.out.println("Length: " + inputArr.length);
for(int i=0;i<inputArr.length;i++){
System.out.println(inputArr[i]);
}
此代码产生以下结果:
Length: 11
(空白索引。实际上不在输出中,所以你可以看到它。否则它将是一个空白区域)
1
2
3
4
5
6
7
8
9
x
答案 0 :(得分:2)
结果开始时的空字符串是正确的(不幸的)行为,因为每个字符串前后都有空字符串,并且使用split("")
您决定拆分空字符串。换句话说
"foo"
将在标有|
"|f|o|o|"
将首先生成数组
["", "f", "o", "o", ""]
但是由于split
默认情况下也会删除尾随的空字符串,因此它会返回没有最后一个空字符串的数组,但会将其留在前面
["", "f", "o", "o"]
This behaviour was improved in Java 8所以"foo".split("")
会返回["f", "o", "o"]
但是如果你想在Java 8之前的版本中得到相同的结果,你需要明确地说要分割每个空字符串除了在其之后/之前有字符串开头的那个。要做到这一点,你可以使用像
yourString.split("(?!^)");
其他替代方法是使用String[]
数组代替char[]
数组,该数组将保存字符串中的字符。要获得这样的数组,您只需调用:
char[] letters = yourString.toCharArray();
答案 1 :(得分:0)
String[] inputArr = input.split("(?!^)");