好像楼主做的是一个词法分析器一样的东西。
建议利用词法分析知识里的超前预取来做,自己写一个类返回你所要标识的字符串类型比如:
    private String getInformation(String words){
        if (words.equals("abstract")) return "1\n";
        else if (words.equals("boolean")) return "2\n";
        else if (words.equals("break")) return "3\n";
        else if (words.equals("byte")) return "4\n";
        else if (words.equals("case")) return "5\n";
        else if (words.equals("catch")) return "6\n";
        else if (words.equals("char")) return "7\n";
        else if (words.equals("class")) return "8\n";
        else if (words.equals("continue")) return "9\n";
        else if (words.equals("default")) return "10\n";
        else if (words.equals("do")) return "11\n";
        else if (words.equals("double")) return "12\n";
        else if (words.equals("else")) return "13\n";
        else if (words.equals("extends")) return "14\n";
        else if (words.equals("final")) return "15\n";
        else if (words.equals("finally")) return "16\n";
        else if (words.equals("float")) return "17\n";
        else if (words.equals("for")) return "18\n";
        else if (words.equals("if")) return "19\n";
        else if (words.equals("implements")) return "20\n";
        else if (words.equals("import")) return "21\n";
        else if (words.equals("instanceof")) return "22\n";
        else if (words.equals("int")) return "23\n";
        else if (words.equals("interface")) return "24\n";
        else if (words.equals("long")) return "25\n";
        else if (words.equals("native")) return "26\n";
        else if (words.equals("new")) return "27\n";
        else if (words.equals("null")) return "28\n";
        else if (words.equals("package")) return "29\n";
        else if (words.equals("private")) return "30\n";
        else if (words.equals("protected")) return "31\n";
        else if (words.equals("public")) return "32\n";
        else if (words.equals("return")) return "33\n";
        else if (words.equals("short")) return "34\n";
        else if (words.equals("static")) return "35\n";
        else if (words.equals("super")) return "36\n";
        else if (words.equals("switch")) return "37\n";
        else if (words.equals("synchronized")) return "38\n";
        else if (words.equals("this")) return "39\n";
        else if (words.equals("throw")) return "40\n";
        else if (words.equals("throws")) return "41\n";
        else if (words.equals("transient")) return "42\n";
        else if (words.equals("try")) return "43\n";
        else if (words.equals("void")) return "44\n";
        else if (words.equals("volatile")) return "45\n";
        else if (words.equals("while")) return "46\n";
        else return words + " 99 \n";
    }
    
    private String validateSymbol(String inputString){
        contents = new String[inputString.length()];
        String resultString = null;
        int i = 0, j = 0, k = 0, l = 0;
        if (inputString.length() > 1){
        for (j = 0; j <= inputString.length() - 1; j ++){
            String word = inputString.substring(j, j + 1);
            if (word.equals(";") || word.equals("(") || word.equals(")") || word.equals("{") || word.equals("}") || word.equals("+") || word.equals("-") || word.equals("*") || word.equals("/") || word.equals("=") || word.equals(">") || word.equals("<") || word.equals("!") || word.equals(",")){
                contents[i] = inputString.substring(k, j);
                contents[i + 1] = inputString.substring(j, j + 1);
                k = j;
                i = i + 2;
            }
        }}
        if (i == 0){
            contents[0] = inputString;
            i ++;
        }
        for (int m = 0; m < i; m ++){
            if (m == 0) resultString = getInformation(contents[m]);
            else resultString = resultString + getInformation(contents[m]);
        }
        return resultString;
    }这个是我自己写的一个词法分析器,还不完善

解决方案 »

  1.   

    我做的是一个汉语词法分析系统,所以会有以上一些字符。下面是我的做法:
    几点说明:
    0。程序的大致含义:判断一个字符串的类型。
       #define  CT_SENTENCE_BEGIN 1//Sentence begin 
       #define  CT_SENTENCE_END   4//Sentence ending
       #define  CT_SINGLE  5//SINGLE byte
       #define  CT_DELIMITER CT_SINGLE+1//delimiter
       #define  CT_CHINESE   CT_SINGLE+2//Chinese Char
       #define  CT_LETTER    CT_SINGLE+3//HanYu Pinyin
       #define  CT_NUM       CT_SINGLE+4//HanYu Pinyin
       #define  CT_INDEX     CT_SINGLE+5//HanYu Pinyin
       #define  CT_OTHER     CT_SINGLE+12//Other
    1。CT_OTHER是一个全局变量,可以用public static final int 来定义
       
    2。C++中char是一个byte,而java中每个字符由2个byte,它使用的是unicode编码。现在有一个疑问:
       那就是在java中这些字符是怎么表示的?
    3。strchr可以在String类里找到相对应的函数
    4。我写的java代码如下,帮我挑错:
       public static int charType(String sChar)
    /**
         *function 判断字符串的类型
         *@param sChar
         *  String 字符串
         * *@return int
         *  返回字符串的类型
         */

    {
      byte[] b=sChar.getBytes("UTF-16"); 
      int s=b[0];
      if(s<128)
      {
     if(new String("\042!,.?()[]{}+=").indexOf(sChar.charAt(0))>=0)
     return utility.CT_DELIMITER;
     return CT_SINGLE;
      }
      else if(s==162)
      return CT_INDEX;
      else if(s==163&&(int)b[1]>175&&(int)b[1]<186)
      return CT_NUM;
      else if(s==163&&(int)b[1]>=193&&(int)b[1]<=218||(int)b[1]>=225&(int)   b   [1]<=250))
      return CT_LETTER;
      else if(s==161||s==163)
      return CT_DELIMITER;
      else if(s>=176&&s<=247)
          return CT_CHINESE;
      else
          return CT_OTHER;
    }