bwoogie
bwoogie

Reputation: 4427

Something similar to split()?

I'm looking to take a string and break it into an array at line breaks (\n) I tried using split but that takes away the delimiter. I need the \n to be kept at the end of each line if it exists. Does something like this already exist or will I need to code it myself?

Upvotes: 5

Views: 1712

Answers (3)

Wesley
Wesley

Reputation: 713

Another solution is just adding the delimiters after splitting

String delimiter = "\n"
String[] split = input.split(delimiter);
for(int i = 0; i < split.length; i++){
    split[i] += delimiter;
}

Upvotes: 1

Hovercraft Full Of Eels
Hovercraft Full Of Eels

Reputation: 285403

I tried using split but that takes away the delimiter. I need the \n to be kept at the end of each line if it exists.

You can still use it and preserve the line break if you use look-ahead or look-behind in your regex. Check out the best regular expressions tutorial that I know of:
Regex Tutorial
Look-Around section of the Regex Tutorial.

For example:

public class RegexSplitPageBrk {


   public static void main(String[] args) {
      String text = "Hello world\nGoodbye cruel world!\nYeah this works!";
      String regex = "(?<=\\n)";  // with look-behind!

      String[] tokens = text.split(regex);

      for (String token : tokens) {
         System.out.print(token);
      }
   }
}

The look-ahead or look-behind (also called "look-around") is non-destructive to the characters they match.

Upvotes: 4

Anthony Accioly
Anthony Accioly

Reputation: 22461

Alternative to @Hovercraft solution with Lookahead assertion:

String[] result = s.split("(?=\n)");

Further details about Lookahead in http://www.regular-expressions.info/lookaround.html

Upvotes: 4

Related Questions