2011-06-17 15 views
12

Quiero analizar la URL de una cadena en Android. El ejemplo de cuerdas es¿Cómo se analiza una url de una cadena en Android?

"This is a new message. The content of the message is in 'http://www.example.com/asd/abc' " 

Quiero analizar la URL http://www.example.com/asd/abc de la cadena sin necesidad de utilizar el método subCadena.

+0

Será una expresión regular a continuación, - siempre encuentran la url dentro de la única carbón cotización o lo hacen yo necesitan una matcher para urls en general? –

+0

Pruebe con el método que publiqué –

Respuesta

29

Actualizado:

Puede utilizar expresiones regulares con Patterns.WEB_URL expresión regular para encontrar todas las direcciones URL en el texto.


original:

Puede utilizar Uri.parse(String uriString) función.

+0

¡Esto definitivamente es genial! – ottel142

+0

No funciona para mí –

0

Puede simplemente crear una nueva URL pasando la cadena como argumento para el constructor. Luego puede usar los diversos métodos en la clase de URL para acceder a las diferentes partes de la URL.

Bien, veo que esto no es lo que usted quiso decir. Probablemente puedas usar una expresión regular, pero usar la subcadena es el método más fácil. ¿Por qué no quieres usarlo?

+0

(la publicación original no formateada fue engañosa; su respuesta fue mi primer pensamiento también; vea cómo se ve la pregunta ahora) –

0

Si la cadena siempre será similar, una solución rápida sería utilizar un StringTokenizer en la comilla simple. Entonces simplemente tomarías el segundo token.

+0

La cadena puede no ser siempre similar. – Kamalone

6

Sí, es posible. Pruebe con el siguiente ejemplo de código

ArrayList retrieveLinks(String text) { 
     ArrayList links = new ArrayList(); 

     String regex = "\\(?\\b(http://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]"; 
     Pattern p = Pattern.compile(regex); 
     Matcher m = p.matcher(text); 
     while(m.find()) { 
     String urlStr = m.group(); 
     char[] stringArray1 = urlStr.toCharArray(); 

     if (urlStr.startsWith("(") && urlStr.endsWith(")")) 
     { 

      char[] stringArray = urlStr.toCharArray(); 

      char[] newArray = new char[stringArray.length-2]; 
      System.arraycopy(stringArray, 1, newArray, 0, stringArray.length-2); 
      urlStr = new String(newArray); 
      System.out.println("Finally Url ="+newArray.toString()); 

     } 
     System.out.println("...Url..."+urlStr); 
     links.add(urlStr); 
     } 
     return links; 
     } 

Gracias Deepak

20

Utilice esta:

public static String[] extractLinks(String text) { 
    List<String> links = new ArrayList<String>(); 
    Matcher m = Patterns.WEB_URL.matcher(text); 
    while (m.find()) { 
     String url = m.group(); 
     Log.d(TAG, "URL extracted: " + url); 
     links.add(url); 
    } 

    return links.toArray(new String[links.size()]); 
} 
2

Si está analizando los enlaces con el fin de labrar ellos, Linkify es una solución elegante:

descriptionTextView.setText("This text contains a http://www.url.com") 
Linkify.addLinks(descriptionTextView, Linkify.WEB_URLS); 

También puede cambiar el color por defecto del enlace:

descriptionTextView.setLinkTextColor(ContextCompat.getColor(getContext(), 
       R.color.colorSecondary)); 

El resultado es el siguiente:

enter image description here

Cuestiones relacionadas