Re: [問題] 檢查保留字的程式
今天晚上很無聊,寫點程式好了。
我恨String.subString(),那是個效能殺手,所以,特意寫了
個不用subString()的版本。
二小時KO,一次寫成沒有Bug,看來寫JAVA越來越熟練了。
執行環境:JDK5.0。
用了稍微過份的Templete語法,所以還不熟Templete的看倌請加油。
____________________________<<以下為程式碼>>______________________________
import java.util.HashSet;
import java.util.TreeMap;
/**
*
* @author Ian
*
*/
public class TextChecker
{
public static final String[] TEST_PATTERN = {
"abstract", "do","implements", "protected",
"throws", "boolean", "double", "import",
"public", "transient", "break", "else",
"instanceof", "return","true", "byte",
"extends", "int", "short","try", "case",
"false","interface", "static", "void",
"catch", "final", "long","strictfp",
"volatile", "char", "finally","native",
"super","while", "class", "float", "new",
"switch", "const", "for", "null",
"synchronized", "continue", "goto",
"package", "this" };
public static final PatternContainer container =
new PatternContainer(TEST_PATTERN);
/**
*
* @param args
*/
public static void main(String[] args)
{
String input = "absd eqwerstatictyuiotryp lkjhgfdsazxcvbn " +
"voidabstract ";
char[] charArr = input.toCharArray();
HashSet<Keyword> set;
for(int i=0,j=charArr.length;i<j;i++)
{
if((set = container.getPattern(charArr[i])) != null)
{
for(Keyword keyword :set)
if(keyword.isMatch(charArr,i))
System.out.println(
"Find keyword \""+keyword+"\" at position["+i+"]");
}
}
}
}
/**
* @author Ian
*/
class PatternContainer
{
protected TreeMap<Character,HashSet<Keyword>> PatternMap =
new TreeMap<Character, HashSet<Keyword>>();
/**
*
* @param patterns
*/
public PatternContainer(String[] patterns)
{
for (int i = 0, j = patterns.length; i < j; i++)
AddPattern(patterns[i]);
}
/**
*
* @param pattern
*/
public void AddPattern(String pattern)
{
HashSet<Keyword> set;
Keyword keyword;
char first = pattern.charAt(0);
if (pattern.length() != 0)
{
if (PatternMap.containsKey(first))
set = PatternMap.get(first);
else PatternMap.put( first, set =
new HashSet<Keyword>());
keyword = new Keyword(pattern);
if (!set.contains(keyword))
set.add(keyword);
}
}
/**
*
* @param key
* @return
*/
public HashSet<Keyword> getPattern(char key)
{
return PatternMap.get(key);
}
}
/**
* @author Ian
*/
class Keyword
{
private char first;
private char[] arr;
private String keyword;
/**
*
* @param word
*/
public Keyword(String keyword)
{
this.keyword = keyword;
arr = keyword.toCharArray();
if (arr.length > 0) first = arr[0];
}
/**
*
*/
public String toString()
{
return keyword;
}
/**
*
* @return
*/
public char getFirst()
{
return first;
}
/**
*
* @param input
* @return
*/
public boolean isMatch(char[] input, int offset)
{
if(input.length-offset<arr.length)return false;
for (int i = 0, j = arr.length; i < j; i++)
if (input[offset + i] != arr[i]) return false;
return true;
}
/**
*
*/
public boolean equals(Object obj)
{
if (obj.getClass() == this.getClass())
{
Keyword key = (Keyword) obj;
return key.isMatch(this.arr, 0);
}
return false;
}
}
___________________________<<以上為程式碼>>____________________________
稍微包裝、修改一下就可以用啦,已經很晚了,就不詳細說明拉。
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.85.116.116
※ 編輯: zanyking 來自: 210.85.116.116 (04/10 01:26)
討論串 (同標題文章)
完整討論串 (本文為第 17 之 17 篇):