The libaddressinput project consists of two different libraries (one implemented in C++, one implemented in Java for Android) that use address metadata from Google's Address Data Service to assist application developers in collecting and handling postal addresses from all over the world.
These libraries can provide information about what input fields are required for a correct address input form for any country in the world and can validate an address to highlight input errors like missing required fields or invalid values.
The C++ library (in very portable C++11) of libaddressinput is used in address-related projects in Chromium.
https://chromium.googlesource.com/chromium/src/+/master/third_party/libaddressinput/
The Java library of libaddressinput is written for use in Android and includes an Android UI address input widget ready for use, but only the UI parts are tied to Android.
Non-UI code and tests can be run in Java SE, and the rest of the library could easily be adapted to run in any Java environment.
Using and developing libaddressinput is discussed on this mailing list:
https://groups.google.com/forum/#!forum/libaddressinput-discuss