Iain Sproat
Iain Sproat

Reputation: 5330

Remove end of line characters from end of Java String

I have a string which I'd like to remove the end of line characters from the very end of the string only using Java

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

which I'd like to become

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

(This question is similar to, but not the same as question 593671)

Upvotes: 9

Views: 18748

Answers (7)

Cowan
Cowan

Reputation: 37533

If you have Google's guava-librariesin your project (if not, you arguably should!) you'd do this with a CharMatcher:

String result = CharMatcher.any("\r\n").trimTrailingFrom(input);

Upvotes: 2

bezmax
bezmax

Reputation: 26122

Well, everyone gave some way to do it with regex, so I'll give a fastest way possible instead:

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 says it operates ~45 times faster than regexp solutions.

Upvotes: 2

polygenelubricants
polygenelubricants

Reputation: 383726

You can use s = s.replaceAll("[\r\n]+$", "");. This trims the \r and \n characters at the end of the string

The regex is explained as follows:

  • [\r\n] is a character class containing \r and \n
  • + is one-or-more repetition of
  • $ is the end-of-string anchor

References


Related topics

You can also use String.trim() to trim any whitespace characters from the beginning and end of the string:

s = s.trim();

If you need to check if a String contains nothing but whitespace characters, you can check if it isEmpty() after trim():

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

Alternatively you can also see if it matches("\\s*"), i.e. zero-or-more of whitespace characters. Note that in Java, the regex matches tries to match the whole string. In flavors that can match a substring, you need to anchor the pattern, so it's ^\s*$.

Related questions

Upvotes: 17

Stephen C
Stephen C

Reputation: 718738

The Apache Commons Lang StringUtils.stripEnd(String str, String stripChars) will do the trick; e.g.

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

If you want to remove all whitespace at the end of the String:

    String trimmed = StringUtils.stripEnd(someString, null);

Upvotes: 2

Jesper
Jesper

Reputation: 206786

String text = "foo\r\nbar\r\nhello\r\nworld\r\n";
String result = text.replaceAll("[\r\n]+$", "");

Upvotes: 1

Favonius
Favonius

Reputation: 13974

"foo\r\nbar\r\nhello\r\nworld\r\n".replaceAll("\\s+$", "")
or
"foo\r\nbar\r\nhello\r\nworld\r\n".replaceAll("[\r\n]+$", "")

Upvotes: 0

Richard Walton
Richard Walton

Reputation: 4785

Wouldn't String.trim do the trick here?

i.e you'd call the method .trim() on your string and it should return a copy of that string minus any leading or trailing whitespace.

Upvotes: 3

Related Questions