我无法将字符串分成固定长度的块并添加到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++;
}
答案 0 :(得分:2)
在split
操作中,正则表达式模式是分隔符。例如,如果正则表达式模式为;
,那么12;34;56
将分为12
,34
和56
。
因此,在您的情况下01234567890
被分为""
(0123
之前的字符串),""
(0123
和{{1}之间的字符串})和4567
(890
之后的字符串的其余部分)。
您可能不想使用4567
,而是使用以下内容:
split
如果可以, Pattern p = Pattern.compile(".{1,4}");
Matcher regexMatcher = p.matcher(messageToSplit);
while (regexMatcher.find()) {
myText.add(regexMatcher.group());
}
将匹配4个字符,但如果四个不再可用,则匹配1-3(如果字符串的长度不是4的倍数,则可能发生在字符串的末尾)。