Changeset 9410 for lang/java/NanikaKit
- Timestamp:
- 04/14/08 00:19:57 (5 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/java/NanikaKit/trunk/src/test/com/mac/tarchan/nanika/NiseSatori.java
r9407 r9410 13 13 import java.io.InputStreamReader; 14 14 import java.util.Arrays; 15 import java.util. HashMap;15 import java.util.LinkedHashMap; 16 16 import java.util.LinkedList; 17 17 import java.util.List; … … 19 19 import java.util.Random; 20 20 import java.util.Scanner; 21 import java.util.regex.Matcher; 21 22 import java.util.regex.Pattern; 22 23 … … 45 46 46 47 /** トーク辞書 */ 47 private Map<String, List<String>> talks = new HashMap<String, List<String>>();48 private Map<String, List<String>> talks = new LinkedHashMap<String, List<String>>(); 48 49 49 50 /** 単語辞書 */ 50 private Map<String, List<String>> words = new HashMap<String, List<String>>();51 private Map<String, List<String>> words = new LinkedHashMap<String, List<String>>(); 51 52 52 53 /** 区切り文字 */ … … 73 74 loadDic(entry); 74 75 } 75 // load_dic(list[0]); 76 log.debug("トーク: " + talks.size() + "," + talks.keySet()); 77 log.debug("単語: " + words.size() + "," + words.keySet()); 76 78 77 79 return true; … … 120 122 } 121 123 122 // while (s.hasNextLine())123 // {124 // String line = s.nextLine();125 //// log.trace("line=" + line);126 // if (line.startsWith("*"))127 // {128 // scanTalk(s, line);129 // }130 // else if (line.startsWith("@"))131 // {132 // scanWord(s, line);133 // }134 // }135 136 124 reader.close(); 137 125 } … … 186 174 { 187 175 if (s.hasNextLine()) line = s.nextLine(); 188 else 189 { 190 line = null; 191 break; 192 } 176 else return null; 193 177 194 178 // 単語を登録 195 if (delimiter.matcher(line).matches()) break;179 if (delimiter.matcher(line).matches()) return line; 196 180 else putWord(key, line); 197 181 } 198 199 return line;200 182 } 201 183 … … 259 241 260 242 /** 243 * 単語を返します。 244 * 245 * @param key キー 246 * @return 単語 247 */ 248 private String getWord(String key) 249 { 250 List<String> list = words.get(key); 251 if (list == null) return null; 252 253 int len = list.size(); 254 int index = rand.nextInt(len); 255 String word = list.get(index); 256 return word; 257 } 258 259 /** 261 260 * さくらスクリプトを返します。 262 261 * … … 270 269 // return "\\0\\s[0]こんにちは。\\1\\s[10]よぉ。\\e"; 271 270 String talk = getTalk(""); 271 log.debug("里々=" + talk); 272 talk = eval(talk); 273 log.debug("さくら=" + talk); 272 274 return talk; 273 275 } 276 277 /** 278 * 里々スクリプトをさくらスクリプトに変換します。 279 * 280 * @param talk 里々スクリプト 281 * @return さくらスクリプト 282 */ 283 public String eval(String talk) 284 { 285 Scanner s = new Scanner(talk); 286 StringBuilder buf = new StringBuilder(); 287 // Pattern p = Pattern.compile("(?:|((.+)))"); 288 // while (s.hasNextLine()) 289 while (true) 290 { 291 String find = s.findInLine(":|((.+?))|[^:(]+"); 292 if (find == null) break; 293 log.debug("find=" + find); 294 295 if (find.startsWith(":")) 296 { 297 298 } 299 else if (find.startsWith("(")) 300 { 301 String key = find.substring(1, find.length() - 1); 302 String word = getWord(key); 303 if (word == null) word = key; 304 buf.append("{" + word + "}"); 305 } 306 else 307 { 308 buf.append(find); 309 } 310 } 311 312 return buf.toString(); 313 } 314 315 /** 316 * テスト001 317 */ 318 public void test001() 319 { 320 String in = ":普通のポストで終わりたくないなぁ……\n:……っていうかお前、自分を普通だと思ってたのか。\n:え?"; 321 String out = "\\0\\s[0]\\1\\s[10]\\0普通のポストで終わりたくないなぁ…\\w2…\\w2\\n\\_w[126]\\n[half]\\1…\\w2…\\w2っていうかお前、\\_w[78]自分を普通だと思ってたのか。\\_w[84]\\n\\n[half]\\0え?\\e"; 322 if (eval(in).equals(out)) System.out.println("OK"); 323 else System.out.println("NG"); 324 } 274 325 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)