private static @Nullable String parseHostnameForClients(final @NotNull String marshalled) {
    final int optionsIndex = marshalled.indexOf(',');
    if (optionsIndex > 0) {
      final String[] options = marshalled.substring(optionsIndex).split(",");
      for (final String option : options) {
        final String[] optionFields = option.split("=");
        if (optionFields.length == 2) {
          final String fieldName = optionFields[0].toLowerCase();
          switch (fieldName) {
            case "hostname-for-clients":
              return optionFields[1];
            case "peer":
            case "server":
              // these settings are deprecated
              break;
            default:
              throw new IllegalArgumentException(marshalled + " invalid option " + fieldName
                  + ". valid options are \"peer\", \"server\" and \"hostname-for-clients\"");
          }
        }
      }
    }
    return null;
  }
Constructs a DistributionLocatorId with a String of the form: hostname[port] or
hostname:bindaddress[port] or hostname@bindaddress[port]
and memberName
<p>
The :bindaddress portion is optional. hostname[port] is the more common form.
<p>
Example: merry.gemstone.com[7056]<br>
Example w/ bind address: merry.gemstone.com:81.240.0.1[7056], or
merry.gemstone.com@fdf0:76cf:a0ed:9449::16[7056]
<p>
Use bindaddress[port] or hostname[port]. This object doesn't need to differentiate between the
two.
<p>
memberName example: locator1 or locator-ny1.
<p>
geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java