Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / October 2005

Tip: Looking for answers? Try searching our database.

String.split regular expression - need help

Thread view: 
Richard - 03 Oct 2005 18:18 GMT
Hello:

Given a
 String s = "{abc}{def}{X}{Y}";

I would like to split it into
 part[0] = "abc";
 part[1] = "abc";
 part[2] = "abc";
 part[3] = "abc";

Attempted
 String[] part = s.split("^\\{|\\}\\{|\\}$");
but that gives an array with "" as a first element

Is there a better regex to extract each item inside {} in my original
string?

Thanks,
Richard
HGA03630@nifty.ne.jp - 03 Oct 2005 19:50 GMT
> part[0] = "abc";
> part[1] = "abc";
> part[2] = "abc";
> part[3] = "abc";
I don't understand your requirement.
Andrew Thompson - 03 Oct 2005 20:08 GMT
>>part[0] = "abc";
>>part[1] = "abc";
>>part[2] = "abc";
>>part[3] = "abc";
>
> I don't understand your requirement.

I think that should have read..

part[0] = "abc";
part[1] = "def";
part[2] = "X";
part[3] = "Y";

Perhaps the OP took 'always copy/paste' a little too
literally.   ;-)
HGA03630@nifty.ne.jp - 04 Oct 2005 00:32 GMT
Then,

String s = "{abc}{def}{X}{Y}";
String[] p = s.split("\\{|\\}\\{|\\}");
for (String ss : p){
 System.out.println(ss);
}
Roedy Green - 03 Oct 2005 20:17 GMT
>  String[] part = s.split("^\\{|\\}\\{|\\}$");
>but that gives an array with "" as a first element

That is exactly what is should do because there is a delimiter on the
front.  If your delimiter were / and you wrote

"/abc/def/"

you would expect "" abc def ""

if you wrote

"abc/def"

you would expect abc def

I think your expectations are being warped by the curliness of your
delimiters.

So the way to handle it is when you are done strip the lead and trail
"", or strip all "".

Then you can dispense with the special case ^ and $.
You could even shorten your regex to

"\\{|\\}"
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

shakah - 03 Oct 2005 21:09 GMT
> Hello:
>
[quoted text clipped - 16 lines]
> Thanks,
> Richard

Not a one-liner, but you could use groups, e.g.:

jc@soyuz:~/tmp$ cat grptest.java
public class grptest {
 public static void main(String [] asArgs) {
   java.util.regex.Pattern p =
java.util.regex.Pattern.compile(asArgs[0]) ;
   System.out.println("    regex: [" + asArgs[0] + "]") ;
   for(int i=1; i<asArgs.length; ++i) {
     String sExpr = asArgs[i] ;
     System.out.println("input str: [" + sExpr + "]") ;
     java.util.regex.Matcher m = p.matcher(sExpr) ;
     while(m.find()) {
       System.out.println("    match: [" + m.group(1) + "]") ;
     }
   }
 }
}

jc@soyuz:~/tmp$ java grptest '\{([^}]*)\}' "{abc}{def}{X}{Y}"
   regex: [\{([^}]*)\}]
input str: [{abc}{def}{X}{Y}]
   match: [abc]
   match: [def]
   match: [X]
   match: [Y]


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.