我试图将一个单词分成单独的字母。
我尝试了String.split("")和String.split(" |")但是当我分割一个单词时,它正在创建一个额外的空元素。 例如:
word = "word";
int n = word.length();
Log.i("20",Integer.toString(n));
String[] letters = word.split("|");
Log.i("25",Integer.toString(letters.length));
Android Monitor中的输出是:
07-21 15:50:23.084 5711-5711/com.strizhevskiy.movetester I/20: 4
07-21 15:50:23.085 5711-5711/com.strizhevskiy.movetester I/25: 5
我将单个字母放入TextView块中,我实际上可以看到一个额外的空TextView。
当我在常规Java中测试这些方法时,它会输出预期的答案:4。
我几乎想到这是Android在该方法实现中的一个实际错误。
答案 0 :(得分:1)
我想你想要这样做:
public Character[] toCharacterArray( String s ) {
if ( s == null ) {
return null;
}
int len = s.length();
Character[] array = new Character[len];
for (int i = 0; i < len ; i++) {
array[i] = new Character(s.charAt(i));
}
return array;
}
而不是在没有分隔符的情况下拆分单词?
我希望这有帮助!
答案 1 :(得分:1)
很难说它的错误或预期的行为,因为你做的事情没有意义。您正在尝试使用逻辑intersects
拆分字符串(OR
正在等待Regular expression
,而不仅仅是字符串),因此在Android中与普通java相比可能会有不同的结果,并且我没有看到任何问题。
无论如何,有很多方法可以以正常方式达到你想要的效果,例如:只需在一个循环中迭代每个字符的单词,或者只使用split
字符串的方法。
答案 2 :(得分:0)
感谢您的建议。我目前的解决方法是使用模拟数组并使用System.arraycopy()复制到一个新数组中。
String[] mockLetters = word.split("");
int n = word.length();
String[] letters = new String[n];
System.arraycopy(mockLetters,1,letters,0,n);
我很欣赏使用toCharArray()的建议。然而,这些字母然后被放入TextViews并且TextView似乎不接受char。我可以,粗糙,使它工作,但我决定坚持我现在拥有的。
汤姆,在对我的问题的评论中,回答了我的根本问题: 为什么String.split()在Android中的工作方式与在Java中的工作方式不同?显然,String.split()的规则随Java 8而改变。
答案 3 :(得分:-1)
尝试按照下面的文档传递0作为限制,以便丢弃尾随空格。
String[] split (String regex, int limit)
如果n为零,则模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。