【问题标题】:Remove trailing slash from String in Java从Java中的String中删除尾部斜杠
【发布时间】:2012-04-17 01:57:11
【问题描述】:

我正在尝试从字符串中删除最后一个字符,如果它是/。我正在使用字符串数组temp[] 来存储字符串。

这是我的代码:

char ch = ' ';
for (int st = 0; st < temp.length; st++)
{
    ch = temp[st].charAt(temp[st].length()-1);
    if (ch == '/')
        temp[st] = temp[st].substring(0, temp[st].length()-1);
    result2.append(temp[st]);
}

但我得到了

StringIndexOutOfBoundsException -1

我做错了什么?

【问题讨论】:

  • 你忘记了防御性编程的一个关键规则——永远不要相信输入。您假设所有字符串都不为空。
  • 为什么要将字符串存储在 char[] 中?
  • 临时有什么东西吗?因为当 temp 为空时,您会得到一个 null 或 length-1 可能超出范围。但是使用 if (str.endsWith("/")) 然后删除最后一个字符。

标签: java string char arrays


【解决方案1】:

如果是/java则删除最后一个字符

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

【讨论】:

  • 它似乎重复了,所以我建议str = str.replaceAll("/+$", "");
  • 在 windows 上替换尾部斜杠(所以它是一个反斜杠):replaceAll("\\\\$", "") 所以在 windows 和 linux 上替换:.replaceAll("(\\\\|/)$", "")
【解决方案2】:

您可以使用replaceFirst(regex, string) 方法通过正则表达式来实现:

String newString = tmp.replaceFirst("/$", "");

【讨论】:

    【解决方案3】:

    如果您只想删除尾随的“/”,应该这样做:

    if (str.endsWith("/"))
        return str.substring(0,str.length()-1);
    else
        return str;
    

    【讨论】:

      【解决方案4】:

      如果你有空字符串"" 然后temp[st].length()-1 == -1

      【讨论】:

        【解决方案5】:

        StringUtils 有一个微妙的小方法,叫做:removeEnd(String str, String remove)

        String result = StringUtils.removeEnd(string, "/")
        

        只有当它是这个被搜索的sn-p时它才会删除字符串的结尾。否则,此方法返回相同的、未更改的字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-09
          相关资源
          最近更新 更多