好像楼主做的是一个词法分析器一样的东西。
建议利用词法分析知识里的超前预取来做,自己写一个类返回你所要标识的字符串类型比如:
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;
}这个是我自己写的一个词法分析器,还不完善
建议利用词法分析知识里的超前预取来做,自己写一个类返回你所要标识的字符串类型比如:
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;
}这个是我自己写的一个词法分析器,还不完善
几点说明:
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;
}