【问题标题】:whitespace will not get removed空格不会被删除
【发布时间】:2016-12-16 12:08:20
【问题描述】:

假设有一个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);

【问题讨论】:

  • 你为什么要这样做?只需获取子字符串。 url = url.substring(0, slash).
  • @toniedzwiedz 我认为您应该将其发布为答案
  • 如果您可以在一行中实现这一点,为什么还要复杂化:-System.out.println(url.replace("/",""));
  • Character.MIN_VALUE mean null 所以用这个替换最后一个值会导致空格或框字符这样你可以使用deleteCharAt(index)

标签: java string whitespace stringbuilder removing-whitespace


【解决方案1】:

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

【讨论】:

  • 那么,如果修剪可以修复它,那么所有这些答案用于删除空格到底有什么用?
  • 您的代码将解决此错误,并且非常好。我是否可以建议也向 OP 解释为什么他的代码首先会留下空白?
  • @user3049183 trim 只会删除字符串开头或结尾的空格。在你的情况下,这就是你所需要的。但有时可能需要删除所有空格,即使是字符串中间的空格。
【解决方案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);

【讨论】:

    【解决方案3】:
    String url="www.example.com/";    
    if(url.endsWith("/")){
                url = url.substring(0, url.length()-1);
            }
    
    System.out.println(url);
    

    【讨论】:

      【解决方案4】:

      您应该使用 deleteCharAt() 而不是 setCharAt()。 但完成这项工作的最简单方法是

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

      【讨论】:

        【解决方案5】:

        问题似乎是 setCharAt 方法的使用。

        此方法用另一个字符替换一个字符。因此,即使您已将其替换为 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?

        这是我的第一个答案,如果我没有遵守约定,请见谅。

        【讨论】:

          【解决方案6】:

          我认为空白是由Character.MIN_VALUE 被解释为空格引起的。

          试试这个。它比您当前的替换代码更简洁,不会留下任何空间。

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

          【讨论】:

            【解决方案7】:

            if-block 中的代码替换为以下代码

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

            【讨论】:

              【解决方案8】:

              你为什么要把事情复杂化,如果这可以在一行中实现

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

              【讨论】:

              • 我最初也有同样的想法。不幸的是,此解决方案不适用于 URL 的一般情况。 (任何带有其他斜杠的 URL。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-23
              • 2017-06-06
              • 2013-12-12
              相关资源
              最近更新 更多