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!
Abhishek - 17 Dec 2007 06:08 GMT
On Dec 17, 8:59 am, "au.da...@gmail.com" <au.da...@gmail.com> wrote:
> Hello all, I have a question about the String split method.
>
[quoted text clipped - 18 lines]
> 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
Stefan Ram - 17 Dec 2007 06:41 GMT
> 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]
au.danji@gmail.com - 17 Dec 2007 14:37 GMT
> "au.da...@gmail.com" <au.da...@gmail.com> writes:
> > String s1 = "a \"single unit\" test";
[quoted text clipped - 12 lines]
>
> [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!
Stefan Ram - 17 Dec 2007 15:23 GMT
>"this is a \"single unit\" test another "second unit" one"
>is it possible to get results:
[quoted text clipped - 6 lines]
>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]
Hal Rosser - 17 Dec 2007 06:47 GMT
> Hello all, I have a question about the String split method.
>
[quoted text clipped - 18 lines]
> 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.
Roedy Green - 18 Dec 2007 01:49 GMT
On Sun, 16 Dec 2007 19:59:48 -0800 (PST), "au.danji@gmail.com"
<au.danji@gmail.com> 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

Signature
Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com