Разделение андроида с пространством, не работающим для этого случая. Зачем?

Мне нужно выделить и сделать 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 – See , www.ee.co.uk/ukcalling и 3 слова, а не как сгруппированные как одно слово.

Я не могу понять, что не так в плане разделения пространства. Пожалуйста, помогите мне узнать.

Solutions Collecting From Web of "Разделение андроида с пространством, не работающим для этого случая. Зачем?"

Замените все невидимые символы пробела.

  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*$)",""); 

Проверьте это как-на-trim-no-break-space-in-java

Попробуйте это. Он работает во всех случаях Для меня

  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 – это мой TextView, которому я устанавливаю String. Спасибо. Упование это помогает