2011-03-25 21 views
27

Quiero eliminar la barra diagonal de una cadena en Java.Eliminar una barra diagonal de una cadena (cambiada del tipo de url) en JAVA

Quiero comprobar si la cadena termina con una url, y si lo hace, quiero eliminarla.

Aquí es lo que tengo:

String s = "http://almaden.ibm.com/"; 

s= s.replaceAll("/",""); 

y esto:

String s = "http://almaden.ibm.com/"; 
length = s.length(); 
--length; 
Char buff = s.charAt((length); 
if(buff == '/') 
{ 
    LOGGER.info("ends with trailing slash"); 
/*how to remove?*/ 
} 
else LOGGER.info("Doesnt end with trailing slash"); 

Pero ni trabajo.

Respuesta

61

hay dos opciones: el uso de la coincidencia de patrones (ligeramente más lento):

s = s.replaceAll("/$", ""); 

o:

s = s.replaceAll("/\\z", ""); 

Y el uso de una sentencia if (un poco más rápido):

if (s.endsWith("/")) { 
    s = s.substring(0, s.length() - 1); 
} 

o (un poco feo):

s = s.substring(0, s.length() - (s.endsWith("/") ? 1 : 0)); 

Tenga en cuenta que necesita utilizar s = s..., porque las cadenas son inmutables.

+0

Gracias por la respuesta, ¿Puedo saber si podría realizar la misma operación en una URL de tipo de variable, ya que quiero declararla como definitiva? replaceTodo no parece funcionar en el tipo URL Gracias por las respuestas de nuevo, soy un principiante en Java! –

+1

'java.net.URL' se puede convertir a' java.lang.String' usando 'toString()'. –

+0

Cuanto más lento, más rápido y feo ... ¡gracias hombre! –

3

url.replaceAll("/$", "") el $ coincide con el final de una cadena por lo que reemplaza la barra al final, si existe.

+0

Gracias por la respuesta, puedo saber si podría realizar la misma operación en un tipo de URL variables, como yo quiero declararlo como definitivo . replaceTodo no parece funcionar en el tipo URL Gracias por las respuestas de nuevo, soy un principiante en Java! –

2

Como su nombre indica, el método replaceAll reemplaza todas las apariciones de la cadena buscada con la cadena de reemplazo. Esto obviamente no es lo que quieres. Usted podría haberlo encontrado leyendo the javadoc.

El segundo está más cerca de la verdad. Al leer el javadoc de la clase String, encontrará un método útil llamado subcadena, que extrae una subcadena de una cadena, con dos índices.

3

Si usted es un usuario de Apache Commons Lang se puede sacar provecho de la método chomp situado en StringUtils

cadena s = "http://almaden.ibm.com/ ";

StringUtils.chomp (s, File.separatorChar + "")

+0

El método de dos argumentos está en desuso en favor de 'removeEnd': https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#removeEnd-java.lang. String-java.lang.String- – berezovskyi

9

Esto debería funcionar mejor:

url.replaceFirst("/*$", "") 
6

método simple en Java

String removeLastSlash(String url) { 
    if(url.endsWith("/")) { 
     return url.substring(0, url.lastIndexOf("/")); 
    } else { 
     return url; 
    } 
} 
+0

Buena respuesta, aunque no necesita la instrucción else. –

0
if (null != str && str.length > 0) 
    { 
     int endIndex = str.lastIndexOf("/"); 
     if (endIndex != -1) 
     { 
      String newstr = str.subString(0, endIndex); // not forgot to put check if(endIndex != -1) 
     } 
    } 
-1

La manera más fácil ...

String yourRequiredString = myString.subString(0,myString.lastIndexOf("/")); 
1

una forma más compacta:

cadena pathExample = "/ test/dir1/dir2 /";

Cadena trimmedSlash = pathExample.replaceAll ("^/|/$", "");

expresión regular ^/sustituye a la primera,/$ reemplaza los últimos

Cuestiones relacionadas