在SpanableString android中进行多次匹配和替换

时间:2017-09-01 03:35:04

标签: android

我想从字符串中替换多个匹配项。

这是我的代码。

import configparser
config = configparser.RawConfigParser()

try:
    with open(YourConfigFilePath) as f:
        config.readfp(f)
except:
    print("Config file Don't exist.")

# Check the config variable
print(config)    

它取代文字但没有给出最好的结果 例如,如果测试为SpannableStringBuilder ss = new SpannableStringBuilder(str); Pattern userNamePattern = Pattern.compile("\\[(.*?)\\]"); Matcher userNameMatcher = userNamePattern.matcher(ss); while (userNameMatcher.find()) { final int start = userNameMatcher.start(); final int end = userNameMatcher.end(); ss.setSpan(new ClickableSpan() { final String clickString = str.substring(start,end); @Override public void onClick(View widget) { } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); } }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.replace(start, end, str.substring(start+1,end-1)); } ,则结果为[A] b [cd] e 我想要的结果是A b [ccd 我怎样才能实现我在这里做错的事情。

1 个答案:

答案 0 :(得分:1)

正如@pskink解释代码Here您可以使用类似这样的东西。我希望这个适合你。

SpannableStringBuilder ss = new SpannableStringBuilder(str);
Pattern userNamePattern = Pattern.compile("\\[(.*?)\\]");
Matcher userNameMatcher = userNamePattern.matcher(ss);
int delta = 0;
while (userNameMatcher.find()) {
  final int start = userNameMatcher.start() - delta;
  final int end = userNameMatcher.end() - delta;
  ss.setSpan(new ClickableSpan() {
      final String clickString = str.substring(start,end);
      @Override
      public void onClick(View widget) { }

      @Override
      public void updateDrawState(TextPaint ds) {
          super.updateDrawState(ds);
          ds.setUnderlineText(false);
      }
  }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

  ss.delete(end - 1, end);
  ss.delete(start, start + 1);
  delta += 2;
}