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++;
}
Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top