android的strings整理腳本

統一對String整理的工具,結構如下

這裏寫圖片描述

代碼


package com.owant.toollib;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by owant on 8/16/16.
 * 對Activity,layout的文件應用String資源的整理工具
 * 使得String統一,而且結構清晰
 */
public class ValuesStringsUtil {

    public static String activityPath = "F:\\MyWorkAS\\NewHome\\app\\src\\main\\java\\com\\xinlianfeng\\android\\livehome\\activity\\DehumidifierSettingActivity.java";
    public final static String layoutParentPath = "F:\\MyWorkAS\\NewHome\\app\\src\\main\\res\\layout\\";
    public final static String valuesStringsPath = "F:\\MyWorkAS\\NewHome\\app\\src\\main\\res\\values\\strings.xml";


    public static List<String> stringIds = new ArrayList<>();
    public static TreeSet<String> stringSet = new TreeSet<>();

    public static void main(String[] arg) {
        businessOnActivity(activityPath);
    }

    private static void businessOnActivity(String activityPath) {
        stringIds.clear();
        stringSet.clear();

        //獲取Activity的String
        String fileContext = getFileContext(activityPath);
        getActivityStrings(fileContext);

        //獲取Activity的Layout文件
        List<String> layoutFileNames = getLayoutFileNames(fileContext);
        if (layoutFileNames.size() > 0) {
            for (String lf : layoutFileNames) {
                String layoutFilePath = layoutParentPath + lf + ".xml";
//                System.out.println("lf:" + lf);
                System.out.println("layout_file_path:\t" + layoutFilePath);
                getLayoutStrings(getFileContext(layoutFilePath));
            }
        }

        String stringContext = getFileContext(valuesStringsPath);

        for (String key : stringIds) {
            String stringValue = getStringValue(stringContext, key);
            if (stringSet.add(stringValue)) {
                System.out.println(stringValue);
            }
        }
    }

    private static String getFileContext(String path) {
        StringBuffer context = new StringBuffer();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(new File(path)));
            byte[] buffer = new byte[1024];
            String value;
            while ((value = reader.readLine()) != null) {
                context.append(value);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return context.toString();
    }

    private static void getActivityStrings(String context) {
        //查找activity中的String
        //getString(R.string.app_name);
        String pattern = "\\(R\\.string\\.(.+?)\\)";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(context);

        while (m.find()) {
            stringIds.add(m.group(1));
        }

        getLayoutFileNames(context);
    }

    private static List<String> getLayoutFileNames(String context) {
        List<String> layoutFileNames = new ArrayList<>();

        //查找activity中包括的Layout文件
        // setContentView(R.layout.activity_test_main);
        //inflate(R.layout.purify_error_dialog_layout, null);
//        String formatLayout = "\\(R\\.layout\\.(.+?)\\)";
        String formatLayout = "R\\.layout\\.(.+?)[;,)]";
        Pattern layoutPattern = Pattern.compile(formatLayout);
        Matcher layoutMatcher = layoutPattern.matcher(context);
        while (layoutMatcher.find()) {

            String groupText = layoutMatcher.group(1);
//            if (groupText.indexOf(",") > 0) {
//                groupText = groupText.substring(0, groupText.indexOf(","));
//            }

            layoutFileNames.add(groupText);
        }
        return layoutFileNames;
    }

    private static void getLayoutStrings(String context) {
        //"@string/tab_contorl"
        String pattern = "\"@string/(.+?)\"";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(context);
        while (m.find()) {
            stringIds.add(m.group(1));
        }
    }

    private static String getStringValue(String context, String key) {
        //    <string name="app_name">Base</string>
        String value = "";
        String format = "<string name=\"{0}\">(.+?)</string>";
        format = format.replace("{0}", key);
        Pattern pattern = Pattern.compile(format);
        Matcher matcher = pattern.matcher(context);
        while (matcher.find()) {
            value = matcher.group(0);
        }
        return value;
    }


}

運行後得到
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章