EmailAddresspublic class EmailAddress extends Object
Fields Summary |
---|
private String | name | private String | address |
Constructors Summary |
---|
public EmailAddress()Creates an empty email address
| public EmailAddress(String email)Creates a new email address based on the given string
final int minLen = 9;
int len = email.length();
// shortcut for "<address>"
if (len > minLen) {
if ((email.charAt(0) == '<" || email.charAt(1) == '<")
&& (email.charAt(len - 1) == '>" || email.charAt(len - 2) == '>")) {
this.address = trim(email, true);
return;
}
}
int paramDepth = 0;
int start = 0;
int end = 0;
int nStart = 0;
int nEnd = 0;
for (int i = 0; i < len; i++) {
char c = email.charAt(i);
if (c == '(") {
paramDepth++;
if (start == 0) {
end = i; // support "address (name)"
nStart = i + 1;
}
} else if (c == ')") {
paramDepth--;
if (end == 0) {
start = i + 1; // support "(name) address"
nEnd = i;
}
} else if (paramDepth == 0 && c == '<") {
if (start == 0) {
nEnd = i;
}
start = i + 1;
} else if (paramDepth == 0 && c == '>") {
end = i;
if (end != len - 1) {
nStart = i + 1;
}
}
}
// DEBUG: System.out.println( email );
if (end == 0) {
end = len;
}
// DEBUG: System.out.println( "address: " + start + " " + end );
if (nEnd == 0) {
nEnd = len;
}
// DEBUG: System.out.println( "name: " + nStart + " " + nEnd );
this.address = trim(email.substring(start, end), true);
this.name = trim(email.substring(nStart, nEnd), false);
// if the two substrings are longer than the original, then name
// contains address - so reset the name to null
if (this.name.length() + this.address.length() > len) {
this.name = null;
}
|
Methods Summary |
---|
public java.lang.String | getAddress()Returns the address
return address;
| public java.lang.String | getName()Returns the display name
return name;
| public void | setAddress(java.lang.String address)Sets the email address
this.address = address;
| public void | setName(java.lang.String name)Sets the personal / display name of the address
this.name = name;
| public java.lang.String | toString()Constructs a string "name <address>" or "address"
if (name == null) {
return address;
} else {
return name + " <" + address + ">";
}
| private java.lang.String | trim(java.lang.String t, boolean trimAngleBrackets)A specialised trim() that trims whitespace,
'(', ')', '"', '<', '>' from the start and end of strings
int start = 0;
int end = t.length();
boolean trim = false;
do {
trim = false;
if (t.charAt(end - 1) == ')"
|| (t.charAt(end - 1) == '>" && trimAngleBrackets)
|| (t.charAt(end - 1) == '"" && t.charAt(end - 2) != '\\")
|| t.charAt(end - 1) <= '\u0020") {
trim = true;
end--;
}
if (t.charAt(start) == '("
|| (t.charAt(start) == '<" && trimAngleBrackets)
|| t.charAt(start) == '""
|| t.charAt(start) <= '\u0020") {
trim = true;
start++;
}
} while (trim);
return t.substring(start, end);
|
|