Reemplazar el dígito inglés con el dígito persa en Cadena, excepto las URL

Escribí una TextView personalizada para la cadena persa, este TextView debe reemplazar los dígitos de Inglés a dígitos persa

public class PersianTextView extends TextView { public PersianTextView(Context context) { super(context); } public PersianTextView(Context context, AttributeSet attrs) { super(context, attrs); } public PersianTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setText(CharSequence text, BufferType type) { String t = text.toString(); t = t.replaceAll("0", "۰"); t = t.replaceAll("1", "۱"); t = t.replaceAll("2", "۲"); t = t.replaceAll("3", "۳"); t = t.replaceAll("4", "۴"); t = t.replaceAll("5", "۵"); t = t.replaceAll("6", "۶"); t = t.replaceAll("7", "۷"); t = t.replaceAll("8", "۸"); t = t.replaceAll("9", "۹"); super.setText((CharSequence)t, type); } } 

esta vista funciona correctamente, pero si establezco un texto de HTML, los enlaces que contienen dígitos en inglés no se mostrarán como enlace. ¿cuál es la manera más fácil de resolver el problema?

3 Solutions collect form web for “Reemplazar el dígito inglés con el dígito persa en Cadena, excepto las URL”

Se necesita de alguna forma hacer concordancia de patrones en los enlaces.

 private static final Pattern DIGIT_OR_LINK_PATTERN = Pattern.compile("(\\d|https?:[\\w_/+%?=&.]+)"); // Pattern: (dig|link ) private static final Map<String, String> PERSIAN_DIGITS = new HashMap<>(); static { PERSIAN_DIGITS.put("0", "۰"); PERSIAN_DIGITS.put("1", "۱"); PERSIAN_DIGITS.put("2", "۲"); PERSIAN_DIGITS.put("3", "۳"); PERSIAN_DIGITS.put("4", "۴"); PERSIAN_DIGITS.put("5", "۵"); PERSIAN_DIGITS.put("6", "۶"); PERSIAN_DIGITS.put("7", "۷"); PERSIAN_DIGITS.put("8", "۸"); PERSIAN_DIGITS.put("9", "۹"); } public static String persianDigits(String s) { StringBuffer sb = new StringBuffer(); Matcher m = DIGIT_OR_LINK_PATTERN.matcher(s); while (m.find()) { String t = m.group(1); if (t.length() == 1) { // Digit. t = PERSIAN_DIGITS.get(t); } m.appendReplacement(sb, t); } m.appendTail(sb); return sb.toString(); } 

PD

Dependiendo de qué texto, podría ser mejor reemplazar sólo los dígitos fuera de las etiquetas HTML, que está entre > y < .

 private static final Pattern DIGIT_OR_LINK_PATTERN = Pattern.compile("(\\d|<[^>]*>)", Pattern.DOTALL|Pattern.MULTILINE); 

probar esto, no tienen comprobar si esto funciona:

 String t = text.toString(); // separate input by spaces ( URLs don't have spaces ) String [] parts = t.split("\\s+"); t=""; // Attempt to convert each item into an URL. for( String item : parts ) try { URL url = new URL(item); t+=item + " "; } catch (MalformedURLException e) { String temp = item; item.replaceAll("0", "۰"); etc. etc. t+=item + " "; } super.setText((CharSequence)t, type); 

Convertir números de Inglés a método de números persas:

 public String persianNumbers(String englishNumber) { StringBuilder builder = new StringBuilder(); String str = englishNumber; char[] persianChars = {'\u0660', '\u0661', '\u0662', '\u0663', '\u0664', '\u0665', '\u0666', '\u0667', '\u0668', '\u0669'}; for (int i = 0; i < str.length(); i++) { if (Character.isDigit(str.charAt(i))) { builder.append(persianChars[(int) (str.charAt(i)) - 48]); } else { builder.append(str.charAt(i)); } } System.out.println("Number in English : " + str); System.out.println("Number In Persian : " + builder.toString()); return builder.toString(); } 
  • ¿Hay una manera de desactivar el ajuste de línea en una vista de lista en android?
  • XAMARIN (C #) - ¿Hay una manera de subrayar un TextView mediante programación?
  • Android: muestra un cuadro de diálogo emergente cuando se hace clic en una palabra concreta de TextView
  • Edittext - cómo ocultar underbar
  • Finalizar el problema de la elipse con TextViews
  • Extra padding en TextView con contenido HTML
  • ¿Cómo puedo mostrar el último texto añadido en textview?
  • Android - Recursos $ NotFoundException
  • Establecer el relleno de texto real en TextView con elementos compuestos
  • Android - epub reader para leer archivos .epub ..
  • Cómo utilizar TextView nativo en la actividad de juego de Andengine
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.