tags:

views:

99

answers:

4

From this string: "/resources/pages/id/AirOceanFreight.xhtml"

I need to retrieve two sub-strings: the string after pages/ and the string before .xhtml.

/resources/pages/ is constant. id and AirOceanFreight varies.

Any help appreciated, thanks!

+8  A: 

I like Jakarta Commons Lang StringUtils:

String x = StringUtils.substringBetween(string, "/resources/pages/", ".xhtml");

Or, if ".xhtml" can also appear in the middle of the string:

String x = substringBeforeLast(
              substringAfter(string, "/resources/pages/"), ".xhtml");

(I also like static imports)

Thilo
and then String res[] = x.split('/');
Maxime ARNSTAMM
wow that is fast. and looks so much simpler than java.util.regex. thanks!
el_zako
Being simpler to use than the Java SDK is the main point of Commons Lang. You do need that extra jar file though (but it is well worth it, lots of nice *Utils). Another option is Google's Guava library.
Thilo
A: 

You can also try with the following regular expression pattern:

(?<=pages\/)(.+(?=.xhtml))

Dušan Stanojević
@Dušan Stanojević: I think you must escape dot before "xhtml"
Stas
+3  A: 

An alternative without jakarta commons. Using the constants:

 private final static String PATH = "/resources/pages/";
 private final static String EXT = ".xhtml";

you'll just have to do:

 String result = filename.substring(PATH.length(), filename.lastIndexOf(EXT));
Andreas_D
+1  A: 

You can use split method in chain.

 String test = "/resources/pages/id/AirOceanFreight.xhtml";
 String result = test.split(".xhtml")[0].split("/resources/pages/")[1];
sh4d0000