Android javaコードのStringハードコーディング抽出
4366 ワード
1、考え方:javaファイルのstringハードコーディングはlayoutファイルのstringハードコーディングのように一括で置き換えることができないので、考え方を変えて、私たちは抽出だけをして、置き換えません.もし私たちがhashmapを持っていたら、keyは繁体字中国語で、valueは簡体字中国語で、私たちはコードのstringハードコーディングをgetstr(「テスト」)と書きます.getStrメソッドの擬似コードは次のとおりです.
このように,問題の鍵はhashmapの生成である.hashmap初期化コードを生成する文字列:正規表現getstr(".*?"\)を使用してすべての中国語のハードコーディングを取得し、Systemを使用します.out.印刷します.
2、主なコード:SearchAndroid CodeText類
3、コードダウンロードアドレス
public static String getStr(String key) {
if (curLang.equals(" ")) {// , key
return key;
} else {
String value = hashmap.get(key);// value,
if (value == null) {// null,
return key;
} else {
return value;
}
}
}
このように,問題の鍵はhashmapの生成である.hashmap初期化コードを生成する文字列:正規表現getstr(".*?"\)を使用してすべての中国語のハードコーディングを取得し、Systemを使用します.out.印刷します.
2、主なコード:SearchAndroid CodeText類
package com.ivan.demo;
import com.ivan.demo.utils.ZHConverter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
// java java , hashmap
public class SearchAndroidCodeText {
private static List stringList = new ArrayList<>();
public static void readToString(String fileName, String keyWord) {
String encoding = "UTF-8";
File file = new File(fileName);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
FileInputStream in = null;
try {
in = new FileInputStream(file);
in.read(filecontent);
in.close();
String content = new String(filecontent, encoding);
Pattern pat = Pattern.compile(keyWord);
Matcher mat = pat.matcher(content);
while (mat.find()) {
String resultStr = mat.group(0);
String resultKey = resultStr.replace("getStr(", "");
resultKey = resultKey.substring(0, resultKey.length() - 1);
stringList.add(resultKey);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void searchFile(File folder, final String keyWord) {//
File[] subFiles = folder.listFiles();
if (subFiles == null) {
return;
}
for (int i = 0; i < subFiles.length; i++) {//
if (subFiles[i].isFile()) {
if (subFiles[i].getName().endsWith(".java")) {
//System.out.println(subFiles[i].getName());
readToString(subFiles[i].getAbsolutePath(), keyWord);
}
} else if (subFiles[i].isDirectory()) {// ,
searchFile(subFiles[i], keyWord);
}
}
}
// string
public static List removeDuplicate(List list) {
List listTemp = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (!listTemp.contains(list.get(i))) {
listTemp.add(list.get(i));
}
}
return listTemp;
}
public static void main(String[] args) throws Exception {// java
String dirPath = "D:\\code\\studio\\StringInternationalDemo\\app\\src\\main\\java";
File folder = new File(dirPath);//
String keyword = "getStr\\(\".*?\"\\)";//?
if (!folder.exists()) {//
System.out.println(" :" + folder.getAbsolutePath());
return;
}
// : java
searchFile(folder, keyword);
stringList = removeDuplicate(stringList);
// : hashmap
ZHConverter converter = ZHConverter.getInstance(ZHConverter.SIMPLIFIED);//
for (String key : stringList) {
String value = converter.convert(key);
System.out.println("data.put(" + key + "," + value + ");");
}
}
}
3、コードダウンロードアドレス