【问题标题】:Android TextUtils.split to deliver a fixed length string[]Android TextUtils.split 提供固定长度的字符串[]
【发布时间】:2011-02-20 20:00:36
【问题描述】:

我无法将字符串分成固定长度的块并添加到 ArrayList ... 下面的代码按预期迭代,但所有 messageToSplit[] 直到最后一个都是空的。最后一个实际上有一个值。

在下面的示例中,如果编辑文本返回“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}”。

标签: android regex string split textutils


【解决方案1】:

split 操作中,正则表达式模式是分隔符。例如,如果正则表达式模式是;,那么12;34;56 将被拆分为123456

因此,在您的情况下,01234567890 被拆分为 ""0123 之前的字符串)、""01234567 之间的字符串)和 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 的倍数,这可能发生在字符串的末尾)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多