Android String.split("")返回额外的元素

时间:2016-07-21 20:15:56

标签: java android

我试图将一个单词分成单独的字母。

我尝试了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在该方法实现中的一个实际错误。

4 个答案:

答案 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为零,则模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。