I've gone through this and am actually surprised that there appears to be a need. There are actually more parts to a street address line,
House Number
Left Direction
Street name
Suffix
Right Direction
Unit/apt number
The easiest way to deal with this is to split the address into tokens using a StringTokenizer Object and checking each postion for tokens that meet criteria for each.
House Number: always in first position and is all numbers.
Left Direction always in the second position and is one of (N, N.,S, E, W, NW, ...)
Unit/Apt is the last position and the token begins with # or the token previous is the
word Unit, Apt.
Right direction preceeds Unit/Apt and is one of the above in Left Direction.
Suffix preceeds Right Direction and is in the approveded list by USPS.
Finally Street Name is everything else.
Hopefully you are starting with a standardized address. If not you can hope for at most an 80% success rate. There are some software packages that do address normalization and the good ones are quite expensive. I can see why the one that I'm working with actually does fuzzy matching against a database of 90% of the US addresses and obtaining and maintain that database is exhaustive work.
Good luck!