在JAVA中从字符串(已更改为URL类型)中删除尾部斜杠

51

我想在Java中将字符串末尾的斜杠删除。

我想检查字符串是否以URL结尾,如果是,我想将其移除。

这是我现在的代码:

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

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

以及这个:

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

但两者都不起作用。

11个回答

102

有两个选择:使用模式匹配(稍微慢一些):

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

并使用if语句(稍微更快):

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

或(有点丑陋):

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

请注意您需要使用s = s...,因为字符串是不可变的。


感谢回复,我想知道是否可以对URL类型的变量执行相同的操作,因为我想将其声明为final。replaceAll似乎无法在URL类型上工作。再次感谢回复,我是Java的初学者! - Eswar Rajesh Pinapala
1
java.net.URL 可以使用 toString() 转换为 java.lang.String - Thomas Mueller

18

这应该会更好运作:

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

2
这将删除多个尾部斜杠,这正是我在寻找的。 - Mike

13

更加简洁,具有空值安全的附加优势。点赞。 - saran3h

8

Java中的简单方法

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

2
不错的回答,虽然你不需要else语句。 - Dan Whitehouse

8

url.replaceAll("/$", "")中的$匹配字符串的结尾,因此如果存在尾部斜杠,则替换它。


谢谢您的回复,我想知道是否可以对变量类型为URL执行相同的操作,因为我想将其声明为final。replaceAll似乎无法在URL类型上工作。再次感谢您的回复,我是Java的初学者! - Eswar Rajesh Pinapala

2

Easiest way ...

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

2
应该使用 myString.substring,而不是 .subString。 - Bruce Calvert

2

如其名所示,replaceAll 方法会将搜索到的所有字符串替换为另一个字符串。显然这不是你想要的。你可以通过阅读 Java API 文档 找到答案。

第二个选项更接近事实。通过阅读 String 类的 Javadoc,你会发现有一个非常有用的方法叫做 substring,可以从一个字符串中提取子字符串,给定两个索引。


2

更紧凑的方式:

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

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

正则表达式 ^/ 代表替换第一个斜杠, /$ 代表替换最后一个斜杠。


1
如果你是 Apache Commons Lang 的用户,你可以利用位于 StringUtils 中的 chomp 方法

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

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


两个参数的方法已被弃用,建议使用 removeEnd 方法:https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#removeEnd-java.lang.String-java.lang.String- - berezovskyi

0

Kotlin 方面

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接