【问题标题】:Would a forward slash cause issues with StringUtils.remove and .removeEnd?正斜杠会导致 StringUtils.remove 和 .removeEnd 出现问题吗?
【发布时间】:2018-04-21 20:06:04
【问题描述】:

我正在使用 JSoup 从网页中提取一段文本,并使用 Apache 的 StringUtils 库清理生成的字符串。第一遍,使用substringBetween 仅抓取括号中的文本,这就像一个魅力,返回一个数字字符串 (value),后跟单位(例如,2500mg/kg)。

但是当我尝试使用removeEnd 删除尾随单位(mg/kg)时:

value = StringUtils.removeEnd(value, "mg/kg");

...我总是得到完全不变的原始字符串——2500mg/kg。

我尝试只使用普通的 removeremoveEndIgnoreCase(以防万一),但我什么也做不了。

首先我尝试了这个作为替代方案:

value = value.substring(0, value.indexOf("m"));

...这对几个测试有效,然后失败了(??)。于是我尝试了:

value = StringUtils.substring(value, 0, -5);

这似乎工作正常,但我并不喜欢它,因为它没有具体说明它要删除的内容。我真的更喜欢在这里使用removeEnd(或类似的东西)(而且我是新手,所以我总是想知道为什么有些东西不起作用)。

谁能解释我做错了什么?我在 StringUtils 文档中找不到对特殊字符的任何限制,但是正斜杠会导致问题吗?还是我应该担心不可见的控制字符?

【问题讨论】:

    标签: java android string substring apache-stringutils


    【解决方案1】:

    为我工作(使用 commons-lang3-3.7.jar):

    public static void main(String[] args) {
    
        String value = "2500mg/kg";
        System.out.println (StringUtils.removeEnd(value, "mg/kg"));
    }
    
    
    2500
    
    Process finished with exit code 0
    

    您确定您的原始字符串以 mg/kg 结尾吗?在尝试 removeEnd 之前将字符串的内容转储到 sysout,或使用调试器检查值。

    如果您怀疑末尾有控制字符,您可以使用另一个 commons-lang 实用程序来显示字符串:

    StringEscapeUtils.escapeJava(value)
    

    【讨论】:

    • 我有一个 logcat 语句,显示字符串肯定以“2500mg/kg”的形式进入removeEnd——根据您的建议,我将其编辑为使用StringEscapeUtils.escapeJava 并包装用单引号输出(确保没有任何尾随空格字符)。
    • 好吧,我用removeEnd 重新输入了该行,现在它可以工作了。回顾我的版本历史,似乎我愚蠢地忘记重新分配变量(该行是only StringUtils.removeEnd(value, "mg/kg"); 没有value =!太尴尬了!谢谢你的建议,这迫使我橡皮鸭。
    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多