android textutils.split以提供固定长度字符串[]
题
我无法将一个字符串丢弃到固定的长度块中,并添加到arraylist ...下面的代码按预期迭代,但所有MessageTosplit [] up到最后一个是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++;
}
. 解决方案
In a split
operation, the regex pattern is the separator. For example, if the regex pattern were ;
, then 12;34;56
would be split into 12
, 34
, and 56
.
So in your case 01234567890
is split into ""
(the string before 0123
), ""
(the string between 0123
and 4567
) and 890
(the remainder of the string after 4567
).
You probably don't want to use split
but rather something like this:
Pattern p = Pattern.compile(".{1,4}");
Matcher regexMatcher = p.matcher(messageToSplit);
while (regexMatcher.find()) {
myText.add(regexMatcher.group());
}
.{1,4}
will match 4 characters if it can, but make do with 1-3 if four are no longer available (which might happen at the end of the string if its length is not a multiple of 4).
不隶属于 StackOverflow