Android TextUtils.split提供固定长度的字符串[]

时间:2011-02-20 20:00:36

标签: android regex string split textutils

我无法将字符串分成固定长度的块并添加到ArrayList中...下面的代码按预期迭代,但是到最后一个的所有messageToSplit []都为null。最后一个实际上有一个值。

在下面的示例中,如果返回编辑文本,则“01234567890”,然后是“”,“”和“890”。

Pattern p = Pattern.compile(".{4}");
ArrayList<String> myText = new ArrayList<String>();
String[] messageToSplit = TextUtils.split(myStringEditText.getText().toString(), p);
int x = 0;
while(x  <= (myStringEditText.getText().toString().length() / 4)) {
  Toast.makeText(getBaseContext(), x+": '" + messageToSplit[x] + "'", Toast.LENGTH_SHORT).show();
  myText.add(messageToSplit[x]);
  x++;
}

1 个答案:

答案 0 :(得分:2)

split操作中,正则表达式模式是分隔符。例如,如果正则表达式模式为;,那么12;34;56将分为123456

因此,在您的情况下01234567890被分为""0123之前的字符串),""0123和{{1}之间的字符串})和4567890之后的字符串的其余部分)。

您可能不想使用4567,而是使用以下内容:

split
如果可以,

Pattern p = Pattern.compile(".{1,4}"); Matcher regexMatcher = p.matcher(messageToSplit); while (regexMatcher.find()) { myText.add(regexMatcher.group()); } 将匹配4个字符,但如果四个不再可用,则匹配1-3(如果字符串的长度不是4的倍数,则可能发生在字符串的末尾)。