1 import java.util.Vector; 2 3 // StringSplitter 4 // A stringsplitter object splits a string into a number of substrings, 5 // each separated by one separator character. Separator characters can be 6 // included in the string by escaping them with a \ 7 public class StringSplitter 8 { 9 Vector parts = new Vector(); 10 int pos = 0; 11 StringSplitter(String str, char sep)12 StringSplitter(String str, char sep) 13 { 14 this(str, sep, true); 15 } 16 StringSplitter(String str, char sep, boolean escape)17 StringSplitter(String str, char sep, boolean escape) 18 { 19 StringBuffer current; 20 21 parts.addElement(current = new StringBuffer()); 22 for(int i=0; i<str.length(); i++) { 23 char c = str.charAt(i); 24 if (c == '\\' && i != str.length()-1 && escape) 25 current.append(str.charAt(++i)); 26 else if (c == sep) 27 parts.addElement(current = new StringBuffer()); 28 else 29 current.append(c); 30 } 31 } 32 33 // countTokens 34 // The number of tokens left in the string countTokens()35 int countTokens() 36 { 37 return parts.size() - pos; 38 } 39 40 // hasMoreTokens 41 // Can we call nextToken? hasMoreTokens()42 boolean hasMoreTokens() 43 { 44 return pos < parts.size(); 45 } 46 47 // nextToken 48 // Returns the string value of the next token nextToken()49 String nextToken() 50 { 51 if (pos < parts.size()) 52 return ((StringBuffer)parts.elementAt(pos++)).toString(); 53 else 54 return null; 55 } 56 57 // gettokens 58 // Returns a vector of strings split from the given input string gettokens()59 Vector gettokens() 60 { 61 return parts; 62 } 63 } 64 65 66 // StringJoiner 67 // The complement of StringSplitter. Takes a number of substrings and adds 68 // them to a string, separated by some character. If the separator character 69 // appears in one of the substrings, escape it with a \ 70 class StringJoiner 71 { 72 char sep; 73 StringBuffer str = new StringBuffer(); 74 int count = 0; 75 76 // Create a new StringJoiner using the given separator StringJoiner(char s)77 StringJoiner(char s) 78 { 79 sep = s; 80 } 81 82 // add 83 // Add one string, and a separator add(String s)84 void add(String s) 85 { 86 if (count != 0) 87 str.append(sep); 88 for(int i=0; i<s.length(); i++) { 89 char c = s.charAt(i); 90 if (c == sep || c == '\\') str.append('\\'); 91 str.append(c); 92 } 93 count++; 94 } 95 96 // toString 97 // Get the resulting string toString()98 public String toString() 99 { 100 return str.toString(); 101 } 102 } 103 104