Problem Statement
We do not want to assign a User Id if the names were incorrectly entered. If the names are unreasonable we will return "BAD DATA". A name is judged to be unreasonable if it contains a character other than a letter ('a'-'z' or 'A'-'Z'), an apostrophe ''', or a space character ' '. It is also unreasonable if the first or last name contains less than 2 letters ('a'-'z' or 'A'-'Z').
The algorithm for choosing a User Id is to choose the first rule below that produces a User Id that has not already been assigned to another user. In each case, truncate the last name as needed so that the resulting User Id is no longer than 8 characters.
- [first initial][last name]
- [first initial][middle initial][last name]
- [first initial][last name][digit][digit]
Before we form the User Id, we will simply eliminate all apostrophes and space characters, and will change all uppercase letters to lowercase. If there is no middle name (or if the middle name contains no letters) then we must skip the second rule. When we apply the third rule, we will try the digit pairs in order starting with 01 then 02 etc. until we find a previously unused User Id.
Create a class UserId that contains method id that takes a
Definition
- Class:
- UserId
- Method:
- id
- Parameters:
- String[], String, String, String
- Returns:
- String
- Method signature:
- String id(String[] inUse, String first, String middle, String last)
- (be sure your method is public)
Constraints
- inUse will contain between 0 and 50 elements inclusive
- each element of inUse will contain between 3 and 8 characters inclusive
- each character in each element of inUse will be a lowercase letter 'a'-'z' or a digit '0'-'9'
- first, middle, and last will each contain between 0 and 50 characters inclusive
- first, middle, and last will contain only ascii characters 32-126 inclusive
Examples
{"bjones","bjones03","bmjones","old34id"}
"Bob"
""
"Jones"
Returns: "bjones01"
Rule 1 generates "bjones" which is already taken. Rule 2 does not apply when there is no middle name. Rule 3 generates "bjones01", which is not already taken.
{"bjones","bjones03","bmjones","old34id"}
"Bob Mack"
"Hertobise"
"Jone's"
Returns: "bhjones"
Rule 1 generates "bjones" which is already taken Rule 2 generates "bhjones" which is available.
{"bjones","bjones03","bmjones","old34id"}
"Bob Mack"
"Hertobise"
"Jonestone"
Returns: "bjonesto"
{"bjonesto","bjones01","bmjonest","old34id"}
"BoB Mack"
"Mo"
"Jonestone"
Returns: "bjones02"
{"bjonesto","bjones01","bjonesto","old34id"}
"BoB-Mack"
"Mo"
"Jonestone"
Returns: "BAD DATA"
The hyphen in "BoB-Mack" is illegal.
{"axbc","axbc01","axbc02","axbc03","axbc04","axbc05","axbc06","axbc07","axbc08","axbc09","axbc10"}
"Axelrod"
"X"
"'B Cal'm'"
Returns: "abcalm"
{"axbc","axbc01","axbc02","axbc03","axbc04","axbc05", "axbc06","axbc07","axbc08","axbc09","axbc10"}
"A'"
"XX"
"BC"
Returns: "BAD DATA"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"A B"
"X"
"'B'C"
Returns: "abc11"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"A'p"
""
"B C"
Returns: "abc11"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"A'p"
"Pernicious"
"B '''C"
Returns: "apbc"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"Alvin01"
"Baker"
"Finch"
Returns: "BAD DATA"
{"abc","adefores"}
"Alvin"
"O'Neill"
"DeForest"
Returns: "aodefore"
{"abc","aodefore"}
"Alvin"
"O'Neill"
"DeForest"
Returns: "adefores"
{"aabc"}
" aa"
"'"
" abc"
Returns: "aabc01"
{"momorris","mmmm","momorr01"}
"'m m"
""
"O'Morrisy"
Returns: "momorr02"
The name is just barely reasonable because the first name has just the two letters required, and the middle name is allowed to be empty. Rule 1 generates "momorris", which is already in use. Rule 2 cannot be applied since there is no middle name. So rule 3 is applied.
{}
"'m m"
"J.J"
"O'Morrisy"
Returns: "BAD DATA"
The period in the middle name is not allowed.
{"axbc","abc01","abc03","abc04","abc05", "abc06","abc07","abc02","abc09","abc10","abc"}
"A'p"
""
"B C"
Returns: "abc08"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"A'p"
" 'YXx'CX"
"B C"
Returns: "aybc"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"A'p"
"X02"
"B C"
Returns: "BAD DATA"
{"axbc","abc01","abc02","abc03","abc04","abc05", "abc06","abc07","abc08","abc09","abc10","abc"}
"A'p"
""
" ' B C"
Returns: "abc11"
{ "jjames" }
"joe1"
""
"james"
Returns: "BAD DATA"
{ }
" A"
" B"
" CCCCCCCCCC"
Returns: "BAD DATA"
{ }
"foo"
"."
"bar"
Returns: "BAD DATA"
{ }
" s"
" a"
" a"
Returns: "BAD DATA"
{ }
"''''''G"
"''"
"''''''M"
Returns: "BAD DATA"
{ "aaa" }
" "
"aaa"
"aaaa"
Returns: "BAD DATA"
{ "aaaaron" }
" "
"a"
" "
Returns: "BAD DATA"
{ "bob" }
"fred"
"w"
""
Returns: "BAD DATA"
{ }
"A"
""
"AAAAA"
Returns: "BAD DATA"
{ }
"J'"
""
"abcd"
Returns: "BAD DATA"
{ }
" "
"A"
" "
Returns: "BAD DATA"
{ }
"''''''''''''' G"
"'' '"
" 'M' "
Returns: "BAD DATA"
{ }
"''s"
""
"''s"
Returns: "BAD DATA"
{ }
" A"
" B"
" CCCCCCC"
Returns: "BAD DATA"
{ }
"''''G"
"'' ''"
"''''M"
Returns: "BAD DATA"
{ }
"a'"
"b"
"cdef"
Returns: "BAD DATA"
{ }
"a "
"asdf"
"asdf"
Returns: "BAD DATA"
{ "jjames" }
"o'"
""
"toole"
Returns: "BAD DATA"
{ }
"A"
""
"b"
Returns: "BAD DATA"
{ }
"''''G"
"''"
"''''M"
Returns: "BAD DATA"
{ "blood" }
"B"
"ABRAHAM"
"ONEAL"
Returns: "BAD DATA"
{ }
" a"
""
" s"
Returns: "BAD DATA"
{ }
" a"
"a"
" a"
Returns: "BAD DATA"
{ "bjones" }
"Bob"
"' '"
"Jones"
Returns: "bjones01"
{ "jwerner" }
"juergen"
""
"werner"
Returns: "jwerne01"
{ "jjkames" }
"o'"
""
"toolt"
Returns: "BAD DATA"
{ }
"a"
"b"
"c"
Returns: "BAD DATA"
{ "aaa" }
" "
"aaa"
"aaa"
Returns: "BAD DATA"
{ }
"a'''"
""
"haaa"
Returns: "BAD DATA"
{ }
"B'"
""
"DAVIS"
Returns: "BAD DATA"
{ }
"b"
""
"z"
Returns: "BAD DATA"
{ }
"m"
""
"m"
Returns: "BAD DATA"
{ "bjones", "bjones03", "bmjones", "old34id" }
"B"
""
"Jones"
Returns: "BAD DATA"
{ "sadffasd" }
"o'"
""
"toole"
Returns: "BAD DATA"
{ }
"''a"
""
"''b"
Returns: "BAD DATA"
{ }
"m"
""
"mm"
Returns: "BAD DATA"
{ }
"A"
"BOB"
"BOB"
Returns: "BAD DATA"
{ "ireally", "hope", "this", "works" }
"johnz"
"rob"
"azzaazz"
Returns: "jazzaazz"
{ "jwerner" }
" 'J '"
""
"Werner"
Returns: "BAD DATA"
{ "aaa" }
"a"
"a"
"a"
Returns: "BAD DATA"
{ }
"A"
"B"
"C"
Returns: "BAD DATA"
{ }
"A'"
"B"
"C'"
Returns: "BAD DATA"