Section 7.7. Example: Processing Names and Passwords


[Page 322]

7.7. Example: Processing Names and Passwords

Many computer systems store user names and passwords as delimited strings, such as

smith:bg1s5xxx mccarthy:2ffo900ssi cho:biff4534ddee4w 


Obviously, if the system is going to process passwords, it needs some way to take apart these name-password pairs.

Let's write methods to help perform this task. The first method will be passed a namepassword pair and will return the name. The second method will be passed a namepassword pair and will return the password. In both cases, the method takes a single String parameter and returns a String result:

String getName(String str); String getPassword(String str); 


Algorithm design


To solve this problem we can make use of two String methods. We use the indexOf() method to find the location of the delimiterthat is, the colon, ":"in the namepassword pair, and then we use substring() to take the substring occurring before or after the delimiter. It may be easier to see this if we take an example:

INDEX:           1         2 INDEX: 012345678901234567890         jones:b34rdffg12    // (1)         cho:rtf546          // (2) 


In the first case, the delimiter occurs at index position 5 in the string. Therefore, to take the name substring, we would use substring(0,5). To take the password substring, we would use substring(6). Of course, in the general case, we would use variables to indicate the position of the delimiter, as in the following methods:

public static String getName(String str) {   int posColon = str.indexOf(':');             // Find the delimiter   String result = str.substring(0, posColon);  // Get name   return result; } public static String getPassword(String str) {   int posColon = str.indexOf(':');             // Find the delimiter   String result = str.substring(posColon + 1); // Get passwd   return result; } 


Note that in both of these cases we have used local variables, posColon and result, to store the intermediate results of the computationthat is, the index of the ":" and the name or password substring.


[Page 323]

An alternative way to code these operations would be to use nested method calls to reduce the code to a single line:

return str.substring(0, str.indexOf(':')); 


In this line, the result of str.indexOf(':') is passed immediately as the second argument to str.substring(). This version dispenses with the need for additional variables. And the result in this case is not unreasonably complicated. But whenever you are faced with a trade-off of this sortnesting versus additional variablesyou should opt for the style that will be easier to read and understand.

Effective Design: Nested Method Calls

Nested method calls are fine as long as there are not too many levels of nesting. The goal should be to produce code that is easy to read and understand.





Java, Java, Java(c) Object-Orienting Problem Solving
Java, Java, Java, Object-Oriented Problem Solving (3rd Edition)
ISBN: 0131474340
EAN: 2147483647
Year: 2005
Pages: 275

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net