?? scanstring.java
字號:
package graph;import java.awt.*;import java.applet.*;import java.util.*;import java.lang.*;/***************************************************************************** Class ScanString****************************************************************************** Copyright (C) 1996 Leigh Brookshaw**** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.**************************************************************************//** * This class is similar to the ScanWord class, except it scans a string * for keywords rather than an input stream. * * @version $Revision: 1.5 $, $Date: 1996/07/12 00:35:49 $ * @author Leigh Brookshaw */ public class ScanString extends Object {/************************ Constants********************/ /** * flag an unknown token */ public final static int UNKNOWN = -256; /** * Flag an error */ public final static int ERROR = -257; /** * Flag a Number */ public final static int NUMBER = -258; /** * flag the End of String */ public final static int EOS = -259; /************************* Private Variables********************/ private String string; private char buffer[]; private int count; private int position; private int kwlength; public String sval; public double nval; /*** The hash table containing the keyword/value pairs.*/ private Hashtable kwords = new Hashtable();/*********************** Constructors*******************/ /** * Instantiate the Class */ public ScanString( ) { string = null; count = 0; position = 0; kwlength = 0; buffer = new char[32]; sval = null; nval = 0.0; } /** * Instantaite the Class * @param s String to scan for tokens */ public ScanString( String s ) { setString(s); } /************************* Public Methods*********************/ /** * Set the string to be scanned * @param s String */ public void setString( String s ) { if(s == null) return; string = new String(s); //System.out.println("ScanSring: string="+string); } /** * Add a keyword/token pair to the table of keywords to scan for. * @param s keyword string to scan for * @param i token to return when the keyword is found */ public void addKeyWord ( String s, int i) { if(s == null) return; if( kwlength < s.length() ) kwlength = s.length(); kwords.put(s.toLowerCase(), new Integer(i)); //System.out.println("addKeyWord: key="+s.toLowerCase()+" value="+i); } /** * @param s keyword string * @return the token corresponding to the keyword */ public int getKeyValue (String s) { if(s == null) return UNKNOWN; if( !kwords.containsKey(s.toLowerCase())) return UNKNOWN; Integer i = (Integer)kwords.get(s.toLowerCase()); if(i == null) return UNKNOWN; else return i.intValue(); } /** * Clear the table containing the keyword/token pairs */ public void resetKeyWords () { kwords.clear(); kwlength = 0; } /** * Process the string and return the next token found. * @return token found */ public int nextWord() { int i; char c; int word; int count = 0; char buffer[] = new char[string.length()]; boolean exponent = false; boolean point = false; if(position >= string.length() ) return EOS; c = string.charAt(position);/*** Remove white space*/ while( c == 32 || c == 9 || c == 10 || c == 11 || c == 13 ) { position++; if( position >= string.length() ) return EOS; c = string.charAt(position); }/*** Is this the start of a number ?*/ if( (c >= '0' && c <= '9') || c == '.' ) { //System.out.println("ScanString: Scan for number!"); for(i=position; i<string.length(); i++) { c = string.charAt(i); if(exponent && ( c < '0' || c > '9' ) ) break; if( c == 'E' || c =='e' || c == 'D' || c =='d' ) { exponent = true; buffer[count++] = 'e'; c = string.charAt(i+1); if( c == '-' || c == '+' ) { buffer[count++] = c; i++; } } else if( point && c == '.' ) { break; } else if( c == '.' ) { point = true; buffer[count++] = c; } else if( c < '0' || c > '9' ) { break; } else { buffer[count++] = c; } } try { sval = new String(buffer,0,count); nval = Double.valueOf(sval).doubleValue(); position += count; return NUMBER; } catch (Exception e) { return ERROR; } } else {/*** Scan for a keyword*/ //System.out.println("ScanString: Scan for Word!"); //System.out.println("ScanString: Maximum Keyword length "+kwlength); int last = UNKNOWN; int nchar = 0; int pos = position; while (pos < string.length() ) { buffer[count++] = string.charAt(pos++); word = getKeyValue(new String(buffer,0,count)); if(word != UNKNOWN ) { last = word; nchar = count; //System.out.println("ScanString: Found KeyWord - "+ // new String(buffer,0,count)); } else if( nchar == 0 && count >= kwlength ) { return ERROR; } else if( count >= kwlength ) { sval = new String(buffer,0,nchar); position += nchar; //System.out.println("ScanString: Returning KeyWord - "+ // sval); return last; } } if( nchar != 0 ) { sval = new String(buffer,0,nchar); position += nchar; //System.out.println("ScanString: Returning KeyWord - "+ // sval); return last; } } return ERROR; } }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -