Eswar Rajesh Pinapala
Eswar Rajesh Pinapala

Reputation: 4911

Remove a trailing slash from a string(changed from url type) in JAVA

I want to remove the trailing slash from a string in Java.

I want to check if the string ends with a url, and if it does, i want to remove it.

Here is what I have:

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

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

and this:

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");

But neither work.

Upvotes: 53

Views: 83523

Answers (11)

seunggabi
seunggabi

Reputation: 1822

Kotlin side

    fun removeTrailSlash(s: String): String {
        return s.replace(Regex("/$"), "")
    }

    fun String.removeTrailSlash(): String {
        return CommonUtil.removeTrailSlash(this)
    }
    @Test
    fun removeTrailSlash() {
        // given
        val expected = "asdf/qwer"
        val s = "$expected/"
        // when
        val actual = CommonUtil.removeTrailSlash(s)
        // then
        assertEquals(expected, actual)
    }
    
    @Test
    fun removeTrailSlash() {
        // given
        val expected = "asdf/qwer"
        val s = "$expected/"
        // when
        val actual = s.removeTrailSlash()
        // then
        Assertions.assertEquals(expected, actual)
    }

Upvotes: 0

Babatunde Adeyemi
Babatunde Adeyemi

Reputation: 14438

You can achieve this with Apache Commons StringUtils as follows:

String s = "http://almaden.ibm.com/";
StringUtils.removeEnd(s, "/")

Upvotes: 15

Lorenzo Nazario
Lorenzo Nazario

Reputation: 31

a more compact way:

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

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

regexp ^/ replaces the first, /$ replaces the last

Upvotes: 2

Zar E Ahmer
Zar E Ahmer

Reputation: 34370

Easiest way ...

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

Upvotes: 2

Sai Aditya
Sai Aditya

Reputation: 2393

   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)
        }
    }  

Upvotes: -1

Serhii Bohutskyi
Serhii Bohutskyi

Reputation: 2259

simple method in java

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

Upvotes: 8

CarlosZ
CarlosZ

Reputation: 8669

url.replaceAll("/$", "") the $ matches the end of a string so it replaces the trailing slash if it exists.

Upvotes: 8

Anton
Anton

Reputation: 181

This should work better:

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

Upvotes: 18

Dante
Dante

Reputation: 334

If you are a user of Apache Commons Lang you can take profit of the chomp method located in StringUtils

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

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

Upvotes: 1

Thomas Mueller
Thomas Mueller

Reputation: 50107

There are two options: using pattern matching (slightly slower):

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

or:

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

And using an if statement (slightly faster):

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

or (a bit ugly):

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

Please note you need to use s = s..., because Strings are immutable.

Upvotes: 104

JB Nizet
JB Nizet

Reputation: 691785

As its name indicates, the replaceAll method replaces all the occurrences of the searched string with the replacement string. This is obviously not what you want. You could have found it yourself by reading the javadoc.

The second one is closer from the truth. By reading the javadoc of the String class, you'll find a useful method called substring, which extracts a substring from a string, given two indices.

Upvotes: 2

Related Questions