2

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

在下面的示例中,如果编辑文本返回,“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++;
}
4

1 回答 1

2

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

因此,在您的情况下01234567890,分为""(之前的字符串0123), (和""之间的字符串)和(之后的字符串的其余部分)。012345678904567

您可能不想使用split,而是这样的:

Pattern p = Pattern.compile(".{1,4}");
Matcher regexMatcher = p.matcher(messageToSplit);
while (regexMatcher.find()) {
    myText.add(regexMatcher.group());
} 

.{1,4}如果可以,将匹配 4 个字符,但如果四个不再可用,则使用 1-3(如果其长度不是 4 的倍数,则可能发生在字符串的末尾)。

于 2011-02-20T20:11:35.773 回答