regular expressions

Discussion in 'Java' started by Covington Bradshaw, Dec 17, 2006.

  1. How to extract 123456789@@abcdefhghij from

    @123456789@@abcdefghij@987654321@@stuvwxyz@

    using regular expressions

    Thanks
    Covington Bradshaw, Dec 17, 2006
    #1
    1. Advertising

  2. Covington Bradshaw wrote:
    > How to extract 123456789@@abcdefhghij from
    >
    > @123456789@@abcdefghij@987654321@@stuvwxyz@
    >
    > using regular expressions


    1) Please add question marks to questions.
    2) Don't forget to quote your budget for the answer,
    when treating this discussion forum as a help-desk.

    Andrew T.
    Andrew Thompson, Dec 17, 2006
    #2
    1. Advertising

  3. Covington Bradshaw

    Chris Smith Guest

    Covington Bradshaw <> wrote:
    > How to extract 123456789@@abcdefhghij from
    >
    > @123456789@@abcdefghij@987654321@@stuvwxyz@
    >
    > using regular expressions


    Unfortunately, you haven't formulated you question well enough to be
    precise. Presumably, you have some idea what you'd want for other
    inputs, as well. What would you want for other inputs? That will help
    people give the answer you want.

    If you don't care about the result for other inputs, then:

    public void sillyMethod(String input)
    {
    return "123456789@@abcdefhghij";
    }

    is the simplest method that does what you asked, and you don't even need
    regular expressions.

    --
    Chris Smith
    Chris Smith, Dec 17, 2006
    #3
  4. And thus, Covington Bradshaw spoke...

    > How to extract 123456789@@abcdefhghij from
    >
    > @123456789@@abcdefghij@987654321@@stuvwxyz@
    >
    > using regular expressions


    Why regular expressions?

    String myString = "@123456789@@abcdefghij@987654321@@stuvwxyz@";

    int first = myString.indexOf("@")+1;
    int third = myString.indexOf("@", myString.indexOf("@", first)+1);

    String n = myString.substring(first, third);

    Of course, that's just a creative guess...

    Flo
    Flo 'Irian' Schaetz, Dec 17, 2006
    #4
  5. Flo 'Irian' Schaetz wrote:
    > And thus, Covington Bradshaw spoke...
    >
    >> How to extract 123456789@@abcdefhghij from
    >>
    >> @123456789@@abcdefghij@987654321@@stuvwxyz@
    >>
    >> using regular expressions

    >
    >
    > Why regular expressions?
    >
    > String myString = "@123456789@@abcdefghij@987654321@@stuvwxyz@";
    >
    > int first = myString.indexOf("@")+1;
    > int third = myString.indexOf("@", myString.indexOf("@", first)+1);


    Shouldn't that be

    int third = myString.indexOf("@", myString.indexOf("@", first)+2);

    ?

    I assume the idea is to parse @foo@@bar@baz@@quux@quuux... into the
    "foo@@bar" records, so you actually want something like

    public static List<String> getRecords (String input)
    throws FormatException {
    int index = 0;
    int len = input.length() - 1;
    List<String> result = new LinkedList<String>();
    while (index < len) {
    int nextStart = input.indexOf('@');
    if (nextStart == -1) throw new FormatException();
    int nextMid = input.indexOf("@@", nextStart + 1);
    if (nextMid == -1) throw new FormatException();
    index = input.indexOf("@", nextMid + 2);
    if (index == -1) throw new FormatException();
    result.add(input.substring(nextStart + 1, index));
    }
    return result;
    }

    Result:
    foo@@bar, baz@@quux, ...

    Or maybe you want key/value pairs?


    public static Map<String, String> getRecords (String input)
    throws FormatException {
    int index = 0;
    int len = input.length() - 1
    Map<String, String> result = new HashMap<String, String>();
    while (index < len) {
    int nextStart = input.indexOf('@');
    if (nextStart == -1) throw new FormatException();
    int nextMid = input.indexOf("@@", nextStart + 1);
    if (nextMid == -1) throw new FormatException();
    index = input.indexOf("@", nextMid + 2);
    if (index == -1) throw new FormatException();
    String key = input.substring(nextStart + 1, nextMid);
    String value = input.substring(nextMid + 2, index);
    if (key.length() == 0 || value.length() == 0)
    throw new FormatException();
    // Optional if duplicate keys are bad.
    if (result.containsKey(key))
    throw new FormatException();
    // End optional
    result.put(key, value);
    }
    return result;
    }

    Result: foo -> bar; baz -> quux; ...

    (Both of the above should throw the exception of your choice if the
    input isn't empty and its format isn't exactly as given above: @
    followed by however-many occurrences of foo@@bar@. The latter disallows
    empty strings, e.g. @foo@@@baz@@quux@.)
    John Ersatznom, Dec 17, 2006
    #5
  6. And thus, John Ersatznom spoke...

    > Shouldn't that be
    >
    > int third = myString.indexOf("@", myString.indexOf("@", first)+2);


    My fault, I missed the 2nd @ in the string. I thought it was
    @something@anothersomething@.

    Flo
    Flo 'Irian' Schaetz, Dec 17, 2006
    #6
    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. Jay Douglas

    Custom Regular Expressions in ASP.net

    Jay Douglas, Nov 2, 2003, in forum: ASP .Net
    Replies:
    3
    Views:
    605
    mikeb
    Nov 3, 2003
  2. mark

    Regular expressions

    mark, Jun 30, 2003, in forum: Perl
    Replies:
    4
    Views:
    1,718
  3. Dustin D.
    Replies:
    1
    Views:
    11,184
  4. Jay Douglas
    Replies:
    0
    Views:
    598
    Jay Douglas
    Aug 15, 2003
  5. Noman Shapiro
    Replies:
    0
    Views:
    232
    Noman Shapiro
    Jul 17, 2013
Loading...

Share This Page