Android TextUtils.split для доставки строки фиксированной длины [] - PullRequest
2 голосов
/ 20 февраля 2011

Я не могу получить строку, разбитую на фрагменты фиксированной длины и добавленную в ArrayList ... приведенный ниже код перебирает, как и ожидалось, но все messageToSplit [] до последнего равны нулю.Последний действительно имеет значение.

В приведенном ниже примере, если текст редактирования вернул, "01234567890" then "", "" и "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++;
}

1 Ответ

2 голосов
/ 20 февраля 2011

В операции split шаблоном регулярного выражения является разделитель . Например, если шаблон регулярного выражения был ;, то 12;34;56 будет разделен на 12, 34 и 56.

Таким образом, в вашем случае 01234567890 делится на "" (строка перед 0123), "" (строка между 0123 и 4567) и 890 (остаток строки после 4567).

Вы, вероятно, не хотите использовать split, а что-то вроде этого:

Pattern p = Pattern.compile(".{1,4}");
Matcher regexMatcher = p.matcher(messageToSplit);
while (regexMatcher.find()) {
    myText.add(regexMatcher.group());
} 

.{1,4} будет соответствовать 4 символам, если это возможно, но обойтись с 1-3, если четыре больше не доступны (что может произойти в конце строки, если его длина не кратна 4).

...