开发者

regular expression to split the string in java

I want to split the string say [AO_12345678, Real Estate] into AO_12345678 and Real Estate

ho开发者_如何学Gow can I do this in Java using regex?

main issue m facing is in avoiding "[" and "]"

please help


Does it really have to be regex?

if not:

String s = "[AO_12345678, Real Estate]";
String[] split = s.substring(1, s.length()-1).split(", ");


I'd go the pragmatic way:

String org = "[AO_12345678, Real Estate]";
String plain = null;
if(org.startsWith("[") {
  if(org.endsWith("]") {
    plain = org.subString(1, org.length());
  } else {
    plain = org.subString(1, org.length() + 1);
  }
}

String[] result = org.split(",");

If the string is always surrounded with '[]' you can just substring it without checking.


One easy way, assuming the format of all your inputs is consistent, is to ignore regex altogether and just split it. Something like the following would work:

String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"]
String firstWithoutBrace = parts[0].substring(1);
String secondWithoutBrace = parts[1].substring(0, parts[1].length() - 1);
String first = firstWithoutBrace.trim();
String second = secondWithoutBrace.trim();

Of course you can tailor this as you wish - you might want to check whether the braces are present before removing them, for example. Or you might want to keep any spaces before the comma as part of the first string. This should give you a basis to modify to your specific requirements however.

And in a simple case like this I'd much prefer code like the above to a regex that extracted the two strings - I consider the former much clearer!


you can also use StringTokenizer. Here is the code:

String str="[AO_12345678, Real Estate]"
StringTokenizer st=new StringTokenizer(str,"[],",false);
String s1 = st.nextToken();
String s2 = st.nextToken();

s1=AO_12345678

s1=Real Estate

Refer to javadocs for reading about StringTokenizer

http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html


Another option using regular expressions (RE) capturing groups:

private static void extract(String text) {
    Pattern pattern = Pattern.compile("\\[(.*),\\s*(.*)\\]");
    Matcher matcher = pattern.matcher(text);
    if (matcher.find()) { // or .matches for matching the whole text
        String id = matcher.group(1);
        String name = matcher.group(2);
        // do something with id and name
        System.out.printf("ID: %s%nName: %s%n", id, name);
    }
}

If speed/memory is a concern, the RE can be optimized to (using Possessive quantifiers instead of Greedy ones)
"\\[([^,]*+),\\s*+([^\\]]*+)\\]"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜