Android textutils.split pour livrer une chaîne de longueur fixe []
Question
Je ne peux pas obtenir une chaîne cassée dans des morceaux de longueur fixes et ajouté à une arraylist ... Le code ci-dessous itière comme prévu, mais tous les messageosplit [] jusqu'à la dernière sont NULL.Le dernier a en fait une valeur de valeur.
Dans l'exemple ci-dessous si le texte d'édition renvoyé, "01234567890" puis "", "" et "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++;
}
La solution
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).