String.split() method question?

Discussion in 'Java' started by au.danji@gmail.com, Dec 17, 2007.

  1. Guest

    Hello all, I have a question about the String split method.

    I have a string s1:
    String s1 = "a \"single unit\" test";
    String[] strArr = s1.split(" ");

    the result is:

    strArr[0]: a
    strArr[1]: "single
    strArr[2]: unit"
    strArr[3]: test


    but I want to let "single unit" to be in the same array element, just
    like this:
    strArr[0]: a
    strArr[1]: "single unit"
    strArr[2]: test

    Can anybody tell me how to do that? should I use the regular
    expression?
    Thanks a lot!
     
    , Dec 17, 2007
    #1
    1. Advertising

  2. Abhishek Guest

    On Dec 17, 8:59 am, "" <> wrote:
    > Hello all, I have a question about the String split method.
    >
    > I have a string s1:
    > String s1 = "a \"single unit\" test";
    > String[] strArr = s1.split(" ");
    >
    > the result is:
    >
    > strArr[0]: a
    > strArr[1]: "single
    > strArr[2]: unit"
    > strArr[3]: test
    >
    > but I want to let "single unit" to be in the same array element, just
    > like this:
    > strArr[0]: a
    > strArr[1]: "single unit"
    > strArr[2]: test
    >
    > Can anybody tell me how to do that? should I use the regular
    > expression?
    > Thanks a lot!


    Why don't you try concatenating the two strings after they have been
    split?
    once you encounter a string "single which starts with quotes, try
    concatenating the following strings till you encounter something which
    ends with a quote unit" .

    Abhishek
     
    Abhishek, Dec 17, 2007
    #2
    1. Advertising

  3. Stefan Ram Guest

    "" <> writes:
    > String s1 = "a \"single unit\" test";
    >strArr[0]: a
    >strArr[1]: "single unit"
    >strArr[2]: test
    >Can anybody tell me how to do that?


    public class Main
    { public static void main
    ( final java.lang.String[] args )
    { java.lang.System.out.println
    ( java.util.Arrays.toString
    ( "a \"single unit\" test".split
    ( "(?: (?=\"))|(?:(?<=\") )" ))); }}

    [a, "single unit", test]
     
    Stefan Ram, Dec 17, 2007
    #3
  4. Hal Rosser Guest

    <> wrote in message
    news:...
    > Hello all, I have a question about the String split method.
    >
    > I have a string s1:
    > String s1 = "a \"single unit\" test";
    > String[] strArr = s1.split(" ");
    >
    > the result is:
    >
    > strArr[0]: a
    > strArr[1]: "single
    > strArr[2]: unit"
    > strArr[3]: test
    >
    >
    > but I want to let "single unit" to be in the same array element, just
    > like this:
    > strArr[0]: a
    > strArr[1]: "single unit"
    > strArr[2]: test
    >
    > Can anybody tell me how to do that? should I use the regular
    > expression?
    > Thanks a lot!


    If you didn't need to keep the quotes intact with the string, you could
    split on the quote.
    String[] strArr = s1.split("\"");

    I guess you could add the quotes back.
    strArr[1] = "\"" + strArr[1] + "\"";
    .... You could just get the array length and add the quotes to all elements
    that do not begin and end with a space.
    Since you split the string on the quote marks, the parts of the string that
    had quotes around it will probably begin with a regular word character, and
    not a space.
     
    Hal Rosser, Dec 17, 2007
    #4
  5. Guest

    On Dec 17, 1:41 am, -berlin.de (Stefan Ram) wrote:
    > "" <> writes:
    > > String s1 = "a \"single unit\" test";
    > >strArr[0]: a
    > >strArr[1]: "single unit"
    > >strArr[2]: test
    > >Can anybody tell me how to do that?

    >
    > public class Main
    > { public static void main
    > ( final java.lang.String[] args )
    > { java.lang.System.out.println
    > ( java.util.Arrays.toString
    > ( "a \"single unit\" test".split
    > ( "(?: (?=\"))|(?:(?<=\") )" ))); }}
    >
    > [a, "single unit", test]




    Hi, thanks a lot for your help, if I need to split a string like this:
    "this is a \"single unit\" test another "second unit" one"
    is it possible to get results:

    a[0] = this
    a[1] = is
    a[2] = a
    a[3] = single unit
    a[4] = test
    a[5] = another
    a[6] = second unit
    a[7] = one

    Most appreciate!
     
    , Dec 17, 2007
    #5
  6. Stefan Ram Guest

    "" <> writes:
    >"this is a \"single unit\" test another "second unit" one"
    >is it possible to get results:
    >a[0] = this
    >a[1] = is
    >a[2] = a
    >a[3] = single unit
    >a[4] = test
    >a[5] = another
    >a[6] = second unit
    >a[7] = one


    public class Main
    { public static void main
    ( final java.lang.String[] args )
    { java.lang.System.out.println
    ( java.util.Arrays.toString
    ( "this is a \"single unit\" test another \"second unit\" one".split
    ( "(?<!\"\\w{1,32}) (?!\\w+\")" ))); }}

    [this, is, a, "single unit", test, another, "second unit", one]
     
    Stefan Ram, Dec 17, 2007
    #6
  7. Roedy Green Guest

    On Sun, 16 Dec 2007 19:59:48 -0800 (PST), ""
    <> wrote, quoted or indirectly quoted someone who
    said :

    >Can anybody tell me how to do that? should I use the regular
    >expression?


    Anything to do with balancing delimiters tends to overamp a regex. You
    will have an easier time with a miniature parser instead, perhaps one
    you write with indexOf and charAt.

    see http://mindprod.com/jgloss/parser.html
    http://mindprod.com/jgloss/regex.html

    --
    Roedy Green Canadian Mind Products
    The Java Glossary
    http://mindprod.com
     
    Roedy Green, Dec 18, 2007
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    2
    Views:
    492
  2. Carlos Ribeiro
    Replies:
    11
    Views:
    742
    Alex Martelli
    Sep 17, 2004
  3. trans.  (T. Onoma)

    split on '' (and another for split -1)

    trans. (T. Onoma), Dec 27, 2004, in forum: Ruby
    Replies:
    10
    Views:
    241
    Florian Gross
    Dec 28, 2004
  4. Sam Kong
    Replies:
    5
    Views:
    279
    Rick DeNatale
    Aug 12, 2006
  5. Stanley Xu
    Replies:
    2
    Views:
    713
    Stanley Xu
    Mar 23, 2011
Loading...

Share This Page