Given a CIDR address, e.g. 192.168.10.0/24
24)255.255.
The IPAddress Java library supports both IPv4 and IPv6 in a polymorphic manner including subnets. The javadoc is available at the link. Disclaimer: I am the project manager.
All the use cases you listed are supported for both IPv4 and Ipv6 transparently.
String str = "192.168.10.0/24";
IPAddressString addrString = new IPAddressString(str);
try {
IPAddress addr = addrString.toAddress();
Integer prefix = addr.getNetworkPrefixLength(); //24
IPAddress mask = addr.getNetwork().getNetworkMask(prefix, false);//255.255.255.0
IPAddress networkAddr = addr.mask(mask); //192.168.10.0
IPAddress networkAddrOtherWay = addr.getLower().removePrefixLength(); //192.168.10.0
...
} catch(AddressStringException e) {
//e.getMessage provides validation issue
}