android的strings整理脚本

2024-06-24 10:18
文章标签 android 整理 脚本 strings

本文主要是介绍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的StringString 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;}}

运行后得到
这里写图片描述

这篇关于android的strings整理脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089868

相关文章

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D