从 JAVA 中的字符串(从 url 类型更改)中删除尾部斜杠

Posted

技术标签:

【中文标题】从 JAVA 中的字符串(从 url 类型更改)中删除尾部斜杠【英文标题】:Remove a trailing slash from a string(changed from url type) in JAVA 【发布时间】:2011-07-23 04:05:14 【问题描述】:

我想从 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");

但两者都不起作用。

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的回复,我能否知道我是否可以对变量类型的 URL 执行相同的操作,因为我想将其声明为 final。 replaceAll 似乎不适用于类型 URL 再次感谢您的回复,我是 java 初学者!【参考方案2】:

正如其名称所示,replaceAll 方法将所有出现的搜索字符串替换为替换字符串。这显然不是你想要的。你可以通过阅读the javadoc自己找到它。

第二个更接近真相。通过阅读 String 类的 javadoc,您会发现一个名为 substring 的有用方法,它在给定两个索引的情况下从字符串中提取子字符串。

【讨论】:

【参考方案3】:

有两种选择:使用模式匹配(稍慢):

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 初学者! java.net.URL 可以使用toString() 转换为java.lang.String【参考方案4】:

如果您是 Apache Commons Lang 的用户,您可以利用 StringUtils

中的 chomp 方法获利

字符串 s = "http://almaden.ibm.com/";

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

【讨论】:

不推荐使用双参数方法以支持removeEnd:commons.apache.org/proper/commons-lang/apidocs/org/apache/…【参考方案5】:

这应该会更好:

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

【讨论】:

这会删除我正在寻找的多个尾随斜杠。【参考方案6】:

java中的简单方法

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

【讨论】:

很好的答案,虽然你不需要 else 语句。【参考方案7】:
   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)
        
      

【讨论】:

【参考方案8】:

最简单的方法...

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

【讨论】:

这应该是 myString.substring,而不是 .subString。【参考方案9】:

更紧凑的方式:

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

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

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

【讨论】:

【参考方案10】:

您可以使用Apache Commons StringUtils 实现此目的,如下所示:

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

【讨论】:

更加简洁,并增加了 null 安全性的好处。赞成。

以上是关于从 JAVA 中的字符串(从 url 类型更改)中删除尾部斜杠的主要内容,如果未能解决你的问题,请参考以下文章

从retrofit2和rxjava中的错误获取url

在 MySQL 中,如何从长文本字符串中提取 URL?

从代码 C# 更改 Web.Config 中的 URL 重写规则

从 web./app.config 更改动态 Web 引用

Javasrcipt中从一个url或者从一个字符串中获取参数值得方法

从 iPhone 应用程序中的 URL 识别文件类型