Create a class defining an object that parses each line of input from the keyboard that contains items separated by an arbitrary delimiter (for example, a colon, or a comma, or a forward slash, and so on) and return the items as an array of type String[]. For example, the input might be
1/one/2/two
The output would be returned as an array of type String[] containing "1", "one", "2", "two".
This is the main Class to Test Above Java Class ' ParseInput '.
Output of Above Java Program
Enter items separated by ,:
java, programs, and, examples, blog
The items that you entered are:
java programs and examples blog
Enter items separated by /:
java/programs/and/example/blog
The items that you entered are:
java programs and example blog
1/one/2/two
The output would be returned as an array of type String[] containing "1", "one", "2", "two".
import java.io.StreamTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class ParseInput {
private StreamTokenizer tokenizer;
private char separator;
// Constructor requires the separator character as the argument
public ParseInput(char separator){
this.separator = separator;
tokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
setTokenizerState();
}
// Sets the tokenizer to accept anyhing except the separator and end-of-line as
// part of a word
private void setTokenizerState() {
tokenizer.resetSyntax();
tokenizer.wordChars('\u0000', (char)(separator - 1)); // Everything is a word character
tokenizer.wordChars((char)(separator + 1), '\u00ff'); // except for the separator
tokenizer.whitespaceChars('\n', '\n'); // Make end-of-line whitespace(and therefore a word delimiter)
tokenizer.whitespaceChars(separator, separator); // Delimiter passed to constructor seaparates words
tokenizer.eolIsSignificant(true); // End-of-line to be reported as TT_EOL
}
// Read tokens from the input
public String[] readTokens() {
int type = 0; // Store the value returned by nextToken()
int strCount = 5; // String capacity increment
String[] tokens = new String[strCount]; // Will store the tokens that we find
int nTokens = 0; // Number of tokens stored
try {
while((type = tokenizer.nextToken()) != StreamTokenizer.TT_EOL) { // As long as we don'y have EOL
// Verify we have space in the tokens array
if(nTokens == tokens.length) {
String[] newTokens = new String[tokens.length+strCount]; // tokens array is full so create a larger array
// Copy old array contents to new array
for(int i = 0 ; i < nTokens ; ++i) {
newTokens[i] = tokens[i];
}
tokens = newTokens; // Replace old array by new array
}
if(type == StreamTokenizer.TT_WORD) { // Check for a word
tokens[nTokens++] = tokenizer.sval; // and save it in the vector
} else {
assert false; // We only expect words
}
}
// Store tokens in array of exactly the right size
if(nTokens < tokens.length) {
String[] newTokens = new String[nTokens];
// Copy old array contents to new array
for(int i = 0 ; i < nTokens ; ++i) {
newTokens[i] = tokens[i];
}
tokens = newTokens; // Replace old array by new array
}
} catch(IOException e) {
e.printStackTrace();
System.exit(1);
}
return tokens;
}
// Convenience method to change the separator
public void setSeparator(char separator) {
this.separator = separator;
setTokenizerState();
}
}
This is the main Class to Test Above Java Class ' ParseInput '.
public class TestParseInput {
public static void main(String[] args) {
char separator = ',';
ParseInput tokenizer = new ParseInput(separator);
parseInputLine(tokenizer, separator);
// Try a different separator
separator = '/';
tokenizer.setSeparator(separator);
parseInputLine(tokenizer, separator);
}
// Reusable parse input operation
static void parseInputLine(ParseInput tokenizer, char separator) {
System.out.println("\nEnter items separated by " + separator + ":");
String[] inputs = tokenizer.readTokens();
if(inputs.length != 0) {
System.out.println("The items that you entered are:");
for( String input : inputs) {
System.out.print(" " + input);
}
}
}
}
Output of Above Java Program
Enter items separated by ,:
java, programs, and, examples, blog
The items that you entered are:
java programs and examples blog
Enter items separated by /:
java/programs/and/example/blog
The items that you entered are:
java programs and example blog