日期:2014-05-20 浏览次数:20733 次
????? 最近有点忙,现在到今天才有时间继续我的博文!
?
1. 对于现流行的J2ME游戏开发而言,有美术、策划和程序。图片由美术完成,游戏控制脚本由策划撰写,实现是由程序负责编写。在三个分工中,会出现汉字部分就是程序(操作说明),还有脚本(人物对话和场景说明)。为此我们需要编写一个程序将游戏的代码部分和脚本过滤出来。在下面的代码中,我采用扩展名来标识:
?
// 筛选出指定扩展名的文件 public String[] filterFile(String directory, String[] extendFileName) { LinkedList<String> allFilePath = new LinkedList<String>(); LinkedList<String> allFilterFilePath = new LinkedList<String>(); searchFile(directory, allFilePath); for (int i = 0, size = allFilePath.size(); i < size; i++) { String path = allFilePath.get(i); if (getFileCodeFormate(path, extendFileName) != -1) { allFilterFilePath.add(path); } } String[] pathStr = new String[allFilterFilePath.size()]; allFilterFilePath.toArray(pathStr); return pathStr; } // 查找出全部的文件 public void searchFile(String directory, LinkedList<String> linkedList) { File file = new File(directory); if (file.isFile()) { linkedList.add(directory); } else { String[] subFiles = file.list(); for (int i = 0; i < subFiles.length; i++) { searchFile(directory + "/" + subFiles[i], linkedList); } } }
?
?
? 运行结果如图:
?
?
2.将文件中汉字提前出来,并作重复性校验 代码如下:
//读取全部文件的内容 public String getAllFileFont(String[] allFilePath, String[] extendFileName, String[] fileFormate) { String[] oneFileFont = new String[allFilePath.length]; int tem; String allfileFont = ""; for (int i = 0, len = oneFileFont.length; i < len; i++) { tem = getFileCodeFormate(allFilePath[i], extendFileName); oneFileFont[i] = getTextByFormate(allFilePath[i], fileFormate[tem]); oneFileFont[i] = getSoleWord(oneFileFont[i]); } for (int i = 0; i < allFilePath.length; i++) { allfileFont = oneFileFont[i] + allfileFont; } allfileFont = getSoleWord(allfileFont); return allfileFont; } // 由扩展名 得出对于的格式 public int getFileCodeFormate(String path, String[] extendFileName) { if (extendFileName == null || extendFileName.length == 0) { return -1; } else { for (int i = 0, len = extendFileName.length; i < len; i++) { if ("".equals(extendFileName[i].trim()) && path.indexOf(".") == -1) { return i; } else if (!"".equals(extendFileName[i].trim()) && path.endsWith(extendFileName[i])) { return i; } } return -1; } } //将对应文件的扩展名应相应的格式读取出来。 private String getTextByFormate(String name, String formate) { String strReturn = ""; int ic; ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); FileInputStream fileInputStream; byte[] myData; byte[] buffer = new byte[1024]; try { fileInputStream = new FileInputStream(new File(name)); if (fileInputStream != null) { while ((ic = fileInputStream.read(buffer)) > 0) { dos.write(buffer, 0, ic); } myData = baos.toByteArray(); // // ANSI: 无格式定义; // // Unicode: 前两个字节为FFFE; // // Unicode big endian: 前两字节为FEFF; // // UTF-8: 前两字节为EFBB; // if ((myData[0] ^ (byte) 0xFE) == 0 // && (myData[1] ^ (byte) 0xFF) == 0) { // formate = "Unicode"; // } else if ((myData[0] ^ (byte) 0xFF) == 0 // && (myData[1] ^ (byte) 0xFE) == 0) { // formate = " Unicode big endian"; // } else if ((myData[0] ^ (byte) 0xEF) == 0 // && (myData[1] ^ (byte) 0xBB) == 0) { // formate = "UTF-8"; // } else { // formate = "GBK"; // } strReturn = new String(myData, formate); fileInputStream.close(); } dos.close(); baos.close(); } catch (Exception e) { System.out.println("getTextByUTF Error:" + e.toString()); } finally { myData = null; buffer = null; fileInputStream = null; dos = null; baos = null; } System.gc(); return strReturn; } //进行不重复性校验 private String getSoleWord(String str) { HashSet<String> ts = new HashSet(); for (int i = 0; i < str.length(); i++) { String subStr = str.substring(i, i + 1); ts.add(subStr); } Iterator<String> entry = ts.iterator(); StringBuffer sb = new StringBuffer(); for (; entry.hasNext();) { sb.append((String) entry.next()); } String ret = sb.toString(); return ret; }
??
?
?
运行结果如图:
?
?3.此时我得到的只是汉字的机内码,现在我们将其排序一下,其作用以后再分析??
? ? //按机内码对字符串进行排序
private String sortAsCodeSequence(String str) {
int len = str.length();
int codeSequence[] = new int[len];
for (int i = 0; i < len; i++) {
codeSequence[i] = str.charAt(i);
}
Arrays.sort(codeSequence);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < len; i++) {
sb.append((char) (codeSequence[i]));
}
return sb.toString();
}
?
?
?
?
?
????