代码之家  ›  专栏  ›  技术社区  ›  Iain Sproat

从Java字符串的结尾删除行尾字符

  •  9
  • Iain Sproat  · 技术社区  · 16 年前

    我有一个字符串,我只想用Java删除字符串末尾的行尾字符

    "foo\r\nbar\r\nhello\r\nworld\r\n"
    

    "foo\r\nbar\r\nhello\r\nworld"
    

    (此问题与问题相似,但与问题不同。) 593671 )

    7 回复  |  直到 9 年前
        1
  •  17
  •   Community Mohan Dere    9 年前

    你可以用 s = s.replaceAll("[\r\n]+$", ""); . 这会修剪头发 \r 和 \n

    正则表达式解释如下:

    • [\r\n] 字符类包含 和
    • + 是一个或多个
    • $ 是弦锚的末端


    相关主题

    你也可以使用 String.trim() 任何 开始 和 字符串的长度:

    s = s.trim();
    

    如果你需要检查 String 只包含空格字符,您可以检查 isEmpty() trim() :

    if (s.trim().isEmpty()) {
       //...
    }
    

    或者你也可以看看 matches("\\s*") matches 尝试匹配 字符串。在可以匹配子字符串的风格中,您需要锚定模式,因此 ^\s*$

        2
  •  3
  •   Richard Walton    16 年前

    不会 String.trim

    .trim() 它应该返回该字符串的一个副本减去任何前导或尾随空格。

        3
  •  2
  •   Stephen C    16 年前

    Apache Commons语言 StringUtils.stripEnd(String str, String stripChars) 会成功的;例如

        String trimmed = StringUtils.stripEnd(someString, "\n\r");
    

    如果你想移除 字符串末尾的空白:

        String trimmed = StringUtils.stripEnd(someString, null);
    
        4
  •  2
  •   bezmax    16 年前

    好吧,每个人都给出了一些使用regex的方法,所以我会给出一个最快的方法:

    public String replace(String val) {
        for (int i=val.length()-1;i>=0;i--) {
            char c = val.charAt(i);
            if (c != '\n' && c != '\r') {
                return val.substring(0, i+1);
            }
        }
        return "";
    }
    

    Benchmark表示,它的运行速度大约是regexp解决方案的45倍。

        5
  •  2
  •   Cowan    16 年前

    guava-libraries CharMatcher :

    String result = CharMatcher.any("\r\n").trimTrailingFrom(input);
    
        6
  •  1
  •   Jesper    16 年前
    String text = "foo\r\nbar\r\nhello\r\nworld\r\n";
    String result = text.replaceAll("[\r\n]+$", "");
    
        7
  •  0
  •   Favonius    16 年前
    “foo\r\nbar\r\nhello\r\nworld\r\n”.replaceAll(”“\\s+$”“,”“)
    或
    “foo\r\nbar\r\nhello\r\nworld\r\n”.replaceAll(“[\r\n]+$”,“”)