【问题标题】:android splitting with space not working for this case. Why?android 空间分割不适用于这种情况。为什么?
【发布时间】:2016-02-25 11:25:22
【问题描述】:

我需要动态突出显示文本中的 url 并使其可点击。

为此,我使用以下方法

private SpannableString addClickablePart(String string) {


        string = string.replaceAll("\\n"," \n ");

        string += " ";
        SpannableString ss = new SpannableString(string);
        String[] words = string.split(" ");
        for (final String word : words) {


            if (CommonUtilities.isValidURL(word)) {


                int lastIndex = 0;

                while(lastIndex != -1){

                    lastIndex = string.indexOf(word+" ",lastIndex);

                    if(lastIndex != -1){
                        ClickableSpan clickableSpan = new ClickableSpan() {
                            @Override
                            public void onClick(View textView) {
                                //use word here to make a decision

                                isRefreshingNecessary = false;

                                Intent mIntent = new Intent(ctx, UserWebsiteActivity.class);
                                mIntent.putExtra("website", word);
                                startActivity(mIntent);
                            }
                        };

                        ss.setSpan(clickableSpan, lastIndex, lastIndex + word.length(),
                                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

                        lastIndex += word.length();
                    }
                }


            }
        }

        return ss;
    }

它适用于大多数情况。但是,不适用于以下示例的所有情况。

在您的计划条款中提供给您的定价信息和 关于这些数字范围的条件将不再适用,并将 取而代之的是这种充电结构。见 www.ee.co.uk/ukcalling 更多信息。

对于上述情况,当我使用

分割整个字符串时
 String[] words = string.split(" ");

 String[] words = string.split("\\s+");

我得到了See www.ee.co.uk/ukcalling for 一个字。相反,我需要将这 3 个 - Seewww.ee.co.uk/ukcallingfor 作为 3 个不同的词,而不是作为单个词分组。

我无法理解用空间分割的方式有什么问题。 请帮我知道。

【问题讨论】:

  • 为什么要投反对票?我提到了我尝试过的。请让我知道出了什么问题,这样我就可以改进,而不仅仅是投反对票。
  • 为简单起见,您还可以将它们分配给 3 个不同的文本视图
  • 我有动态字符串,所以我不能以静态方式处理它们。我将只有一个文本视图,其中需要突出显示 url 部分,只要存在@VivekMishra
  • 投反对票的最有可能的原因是因为它不可重现...您能在 ideone.com 中重现该问题并分享链接吗?
  • 请让我检查一下那个链接。

标签: java android split


【解决方案1】:

替换所有不可见的空白字符。

 string = string.replaceAll("\\t", " ");
 string = string.replaceAll("\\xA0", " ");
 string = string.replaceAll("\\u1680", " ");
 string = string.replaceAll("\\u180e", " ");
 string = string.replaceAll("\\u2000", " ");
 string = string.replaceAll("\\u200a", " ");
 string = string.replaceAll("\\u202f", " ");
 string = string.replaceAll("\\u205f", " ");
 string = string.replaceAll("\\u3000", " ");

对于 java 8

string = string.replaceAll("(^\\h*)|(\\h*$)","");

检查这个how-to-trim-no-break-space-in-java

【讨论】:

    【解决方案2】:

    试试这样。它适用于所有情况对我来说

     SpannableString ss = new SpannableString("Your String");
      ClickableSpan clickableSpan = new ClickableSpan() {
      @Override
       public void onClick(View textView) {
        //Perform Click Here
       }
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);
    }
    };
    
    ss.setSpan(clickableSpan, pos, last+5, Spanned.SPAN_USER);
    
    
        desc.setText(ss);
        desc.setMovementMethod(LinkMovementMethod.getInstance());
        desc.setHighlightColor(Color.TRANSPARENT);
    

    请注意 desc 是我设置 String 的 TextView。 谢谢。希望对您有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      相关资源
      最近更新 更多