2016-12-16 202 views
0

假设有一个url="www.example.com/"。使用下面的代码我想删除结尾的斜杠,但它在字符串的末尾留下一个空白(顺便说一下,我不知道为什么),并使用其余的代码,我试图删除空白,但它不管用。空白不会被删除

String url="http://www.example.com/"; 
    int slash=url.lastIndexOf("/"); 


    StringBuilder myURL = new StringBuilder(url); 

    if(url.endsWith("/")){ 
     myURL.setCharAt(slash, Character.MIN_VALUE); 
     url=myURL.toString(); 
    } 

    url=url.replaceAll("\\s+",""); 
    System.out.println(url); 
+1

你为什么要那样做?只需获取子字符串。 'url = url.substring(0,斜杠)'。 – toniedzwiedz

+0

@toniedzwiedz我认为你应该把它作为答案 –

+0

为什么复杂化的事情,如果你可以在一行中实现这一点:-System.out.println(url.replace(“/”,“”)); – Valath

回答

2

因为\s+不匹配Character.MIN_VALUE。改为使用' '

String url="www.example.com/"; 
int slash=url.lastIndexOf("/"); 


StringBuilder myURL = new StringBuilder(url); 

if(url.endsWith("/")){ 
    myURL.setCharAt(slash, ' '); 
    url=myURL.toString(); 
} 

url=url.replaceAll("\\s+",""); 
System.out.println(url); 

但是,您为什么不删除/

String url="www.example.com/"; 
int slash=url.lastIndexOf("/"); 

StringBuilder myURL = new StringBuilder(url); 
myURL.deleteCharAt(slash); 
System.out.println(myURL); 
4

尝试修剪:url = url.trim();

+0

所以,到底用什么方法去除空格如果修剪可以修复它? – user3049183

+0

你的代码将解决这个错误,并且非常好。我可能还建议向OP解释为什么他的代码首先要留下一个空白空间? –

+0

@ user3049183 trim只会删除字符串开头或结尾的空格。在你的情况下,这就是你需要的一切。但有时可能需要删除所有空格,即使是在字符串中间的空格也是如此。 –

0

我觉得空白空间是由Character.MIN_VALUE被解释为一个空格造成的。

试试这个。它比你当前的替换代码更清洁一些,并且不会留下任何空间。

if(url.endsWith("/")){ 
    url = url.trim().substring(0, url.length-1); 
} 
2
String url="www.example.com/";  
if(url.endsWith("/")){ 
      url = url.substring(0, url.length()-1); 
     } 

System.out.println(url); 
1

相反setCharAt的(),你应该使用deleteCharAt()。 但做的工作最简单的方法是

String url="www.example.com/"; 
url = url.substring(0, url.lastIndexOf("/")); 
0

替换你的代码你如果块内与下面一个

url = url.substring(0, url.length()-1).trim(); 

那么我希望你将不再需要一个StringBuilder的对象也。

所以你的最终代码看起来像

String url="www.example.com"; 
url = (url.endsWith("/")) ? url.substring(0, url.length()-1) : url; 
System.out.print(url); 
0

你为什么复杂的事情,如果这可以在单行实现

String url="www.example.com/"; 
url=url.replace("/",""); 
System.out.println(url); 
+0

我最初有同样的想法。不幸的是,这个解决方案在URL的一般情况下不起作用。 (任何带有其他斜杠的URL。 –

1

问题似乎是使用setCharAt方法。

该方法用另一个char替换char。所以即使你用Character.MIN_VALUE取代了它,乍一看似乎可以代表Null字面值,但它实际上仍然是一个Unicode字符('\ 0000',也就是空字符)。

最简单的修复方法是替换...

myURL。 setCharAt(斜杠,Character.MIN_VALUE);

...

myURL。 deleteCharAt(斜线);

有关空字符的更多信息...

Understanding the difference between null and '\u000' in Java

what's the default value of char?

这是我的第一个答案所以道歉,如果我不能保持约定。