Android javaコードのStringハードコーディング抽出

4366 ワード

1、考え方:javaファイルのstringハードコーディングはlayoutファイルのstringハードコーディングのように一括で置き換えることができないので、考え方を変えて、私たちは抽出だけをして、置き換えません.もし私たちがhashmapを持っていたら、keyは繁体字中国語で、valueは簡体字中国語で、私たちはコードのstringハードコーディングをgetstr(「テスト」)と書きます.getStrメソッドの擬似コードは次のとおりです.
 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、コードダウンロードアドレス