2

文字列を固定長のチャンクに分割してArrayListに追加することはできません...以下のコードは期待どおりに繰り返されますが、最後のメッセージまでのすべてのmessageToSplit[]は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++;
}
4

1 に答える 1

2

操作では、split正規表現パターンはセパレーターです。たとえば、正規表現パターンが;、の場合、、、、およびに12;34;56分割されます。123456

したがって、あなたの場合は、(前の文字列)、 (との間の文字列)、および(後の文字列の残りの部分)に01234567890分割されます。""0123""012345678904567

あなたはおそらく使いたくないでしょうsplitが、むしろこのようなものを使いたくないでしょう:

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

.{1,4}可能であれば4文字に一致しますが、4文字が使用できなくなった場合は1〜3で処理します(文字列の長さが4の倍数でない場合は文字列の最後で発生する可能性があります)。

于 2011-02-20T20:11:35.773 に答える