Android TextUtils.split para entregar uma string de comprimento fixo[]
Pergunta
Não consigo quebrar uma string em pedaços de comprimento fixo e adicioná-la a um ArrayList ...o código abaixo itera conforme o esperado, mas todos os messageToSplit[] até o último são nulos.O último realmente tem um valor.
No exemplo abaixo, se o texto de edição retornou, "01234567890" depois "", "" e "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++;
}
Solução
Em um split
operação, o padrão regex é o separador.Por exemplo, se o padrão regex fosse ;
, então 12;34;56
seria dividido em 12
, 34
, e 56
.
Então no seu caso 01234567890
é dividido em ""
(a string antes 0123
), ""
(a string entre 0123
e 4567
) e 890
(o restante da string depois 4567
).
Você provavelmente não quer usar split
mas sim algo assim:
Pattern p = Pattern.compile(".{1,4}");
Matcher regexMatcher = p.matcher(messageToSplit);
while (regexMatcher.find()) {
myText.add(regexMatcher.group());
}
.{1,4}
corresponderá a 4 caracteres, se puder, mas contentar-se-á com 1-3 se quatro não estiverem mais disponíveis (o que pode acontecer no final da string se seu comprimento não for múltiplo de 4).