空白不会被删除
假设有一个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);
因为\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);
尝试修剪:url = url.trim();
所以,到底用什么方法去除空格如果修剪可以修复它? – user3049183
你的代码将解决这个错误,并且非常好。我可能还建议向OP解释为什么他的代码首先要留下一个空白空间? –
@ user3049183 trim只会删除字符串开头或结尾的空格。在你的情况下,这就是你需要的一切。但有时可能需要删除所有空格,即使是在字符串中间的空格也是如此。 –
我觉得空白空间是由Character.MIN_VALUE
被解释为一个空格造成的。
试试这个。它比你当前的替换代码更清洁一些,并且不会留下任何空间。
if(url.endsWith("/")){ url = url.trim().substring(0, url.length-1); }
String url="www.example.com/";
if(url.endsWith("/")){
url = url.substring(0, url.length()-1);
}
System.out.println(url);
相反setCharAt的(),你应该使用deleteCharAt()。 但做的工作最简单的方法是
String url="www.example.com/";
url = url.substring(0, url.lastIndexOf("/"));
替换你的代码你如果块内与下面一个
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);
你为什么复杂的事情,如果这可以在单行实现
String url="www.example.com/";
url=url.replace("/","");
System.out.println(url);
我最初有同样的想法。不幸的是,这个解决方案在URL的一般情况下不起作用。 (任何带有其他斜杠的URL。 –
问题似乎是使用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?
这是我的第一个答案所以道歉,如果我不能保持约定。
你为什么要那样做?只需获取子字符串。 'url = url.substring(0,斜杠)'。 – toniedzwiedz
@toniedzwiedz我认为你应该把它作为答案 –
为什么复杂化的事情,如果你可以在一行中实现这一点:-System.out.println(url.replace(“/”,“”)); – Valath