Android TextUtils.Split가 고정 된 길이 문자열을 제공합니다 []
문제
고정 된 길이 덩어리로 파손되고 ArrayList에 추가 된 문자열을 얻을 수 없습니다. 아래의 코드는 예상대로 반복됩니다. 그러나 마지막 하나가 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).