rahul888
rahul888

Reputation: 413

Split a String - java

I have a string that would look like this .

String str="some data some data some data some data some data some data 
some data some data some data some data some data some data some data 
some data some data some data some data some data some data 
some data some data some data some data some data 
some data some data some data some data some data 
YLOG^2Fri Nov 08 00:58:59 PST 2013^^^^^^^^^^^^^^^^^^^^^latency in nano time : 264414262^
YLOG^2Fri Nov 08 00:58:59 PST 2013^^^^ XML after modification :<site name="some data ">
some data some data some data some data some data some data some data 
some data some data some data some data some data some data 
some data some data some data some data some data 
some data some data some data some data some data some data some data some data some data some data some data some data 
some data some data some data some data some data some data 
some data some data some data some data some data 
some data some data some data some data some data "

I would like to split this string in to parts . Basically I need the part after

^^^^^^latency in nano time :

That would be:

264414262^
    YLOG^2Fri Nov 08 00:58:59 PST 2013^^^^ XML after modification :<site name="some data ">
    some data some data some data some data some data some data some data 
    some data some data some data some data some data some data 
    some data some data some data some data some data 
    some data some data some data some data some data some data some data some data some data some data some data some data 
    some data some data some data some data some data some data 
    some data some data some data some data some data 
    some data some data some data some data some data 

What I tried :

String[] splited = str.split("^^^^^latency in nano");
Sysout(splitted);

But that didn't work out for me. Any help would be appreciated.

Upvotes: 2

Views: 149

Answers (4)

Tanya Kogan
Tanya Kogan

Reputation: 151

The reason why the split didn't work is because '^' is a metacharacter in regular expressions. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

If you really want to use split, you should escape '^' character

String[] splitted = str.split("\\^\\^\\^\\^\\^latency in nano");
System.out.println(splitted[1];

In this case it is probably better just to use indexOf

Upvotes: 2

Mena
Mena

Reputation: 48444

If your "delimiter" is constant, you can substring your original String with the indexOf your delimiter + its length.

Very ugly example below:

String s = "blah^^^^^^^latency in nano time : baz";
System.out.println(
        s.substring(
                s.indexOf("^^^^^^^latency in nano time : ") + "^^^^^^^latency in nano time : ".length()
        )
);

Output:

baz

Note:

This does not split your String in any way. It just returns what's after your "delimiter".

Also watch out for bugs:

  • If your delimiter is not contained in the original String, the code will return your original String's sub-string starting from -1 + your delimiter's length
  • If the previous condition applies, and if -1 + your delimiter's length is larger than your String length, the code will throw a StringIndexOutOfBoundsException at runtime

Upvotes: 1

MadConan
MadConan

Reputation: 3767

I need the part after ...

This has me going with indexOf as opposed to split

public String getSub(String orig){
    String delim = "^^^^^latency in nano";

    int idx = orig.indexOf(delim);
    if(idx != -1){
       return orig.substring(idx + delim.length());
    }
    return orig; // delim not found.
}

Upvotes: 2

Obicere
Obicere

Reputation: 3019

Once you split, just get the second element splitted[1]. That should give you everything after what you split on.

There are some safety issues, but it should work if the input is always constant in form.


Some recommendations:

Ensure the input contains the string you are splitting and there is content after.

-or-

Ensure the length of splitted is at least two before getting the second element.


Also, the reason why the output in Sysout(splitted) may not have been correct is because of the default toString() of arrays. You should follow this when printing arrays.

Upvotes: 1

Related Questions