Re: [問題] 檢查保留字的程式

看板java作者 (遙遠的旅人)時間18年前 (2006/04/10 01:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串17/17 (看更多)
今天晚上很無聊,寫點程式好了。 我恨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)
文章代碼(AID): #14EK0Dlg (java)
討論串 (同標題文章)
文章代碼(AID): #14EK0Dlg (java)