2

Am very poor in regex, so please bear with me.

I have strings LQiW0/QIDAQAB/ and LQiW0/QIDAQAdfB/.

I'm trying to remove the last forward slash.

Tried str= str.replaceAll("\\/","");

I tried replace all but it replaces all forward slashes.. and the thing is, I want to replace if it is at last position

4

5 回答 5

13

Try following code:

str = str.replaceAll("\\/$", "");

$ means end of line (in this case, end of string).

于 2013-07-12T14:45:19.190 回答
5

你真的需要正则表达式吗?一个简单substring的就可以完成这项工作:

str = str.substring(0, str.lastIndexOf("/"));

但是,如果您只想在字符串末尾替换正斜杠,那么replaceAll在那里会很好。

但您也可以使用它(与 相比,这可能不更具可读性replaceAll):

str = str.endsWith("/") ? str.substring(0, str.length() - 1) : str;
于 2013-07-12T14:47:08.103 回答
3

最好不要对这些琐碎的操作使用正则表达式替换。人们倾向于一直使用正则表达式,即使在不需要时也是如此。此外,正则表达式可能非常简单,但当您需要涵盖一些侧面情况时,它会很快变得丑陋。请参阅https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions

在你的情况下,有一个很好的工具来完成这项工作。

您可以使用org.apache.commons.lang.StringUtils

StringUtils.stripEnd("LQiW0/QIDAQAdfB/", "/")   = "LQiW0/QIDAQAdfB"
StringUtils.stripEnd("LQiW0/QIDAQAdfB///", "/")   = "LQiW0/QIDAQAdfB"

StringUtils.stripStart("///LQiW0/QIDAQAdfB/", "/")   = "LQiW0/QIDAQAdfB/"
StringUtils.stripStart("///LQiW0/QIDAQAdfB///", "/")   = "LQiW0/QIDAQAdfB///"
于 2013-07-12T14:52:49.117 回答
0
str = str.replaceAll(@"\/(?=\n)", "");

这应该匹配一个正斜杠,后跟一个新行。

于 2013-07-12T14:55:45.493 回答
0

如果您要拥有类似的字符串LQiW0/QIDAQAB/Sdf4s并且想要删除最后一个/要获取的字符串LQiW0/QIDAQABSdf4s,那么这将起作用。

str = str.substring(0,str.lastIndexOf('/'))+str.substring(str.lastIndexOf('/')+1);

它也适用于最后一个字符的情况/

于 2013-07-12T15:29:16.563 回答