【发布时间】:2012-12-11 05:54:09
【问题描述】:
我正在对 Android 应用执行本地化。此过程中的痛点之一是区分用于向用户显示的字符串文字和在本地/以编程方式使用的字符串文字之间的区别。
public static String PERSON = "Person";
intent.putExtra("isPerson", isPerson);
myTextView.setText("My name is Mark");
什么是正则表达式,我可以使用什么正则表达式给我的代码行,其中文本用引号引起来,但 1)不是变量声明和 2)不用作字符串键/值映射中的键,如第二行。理想的目标是让表达式的匹配结果为第 3 行的类型。我可以查找包含 setText 的字符串,但随后会丢失如下硬编码的字符串:
String firstName = "Mark";
myTextView.setText(firstName);
我已经设法得到所有用引号括起来的非空字符串:
\"\w{1,}"
这个问题是它太宽泛了,给了我一切。此外,我希望以下内容能够返回所有不包含 putExtra 的字符串:
(?<!putExtra).\"\w{1,}"
但这也不好用,因为它返回的结果如下:
intent.putExtra("title", "Welcome");
当我想排除任何包含 putExtra 子字符串的文本行时,“欢迎”使其显示为匹配项。
RegEx 大师的任何帮助将不胜感激。我目前正在使用启用正则表达式的 Eclipse 文件搜索功能
【问题讨论】:
-
无法理解您要做什么。
-
我对 Android 知之甚少,但在我看来,您好像在找错东西。相反,您可能应该尝试搜索可显示的任何类型组件的所有用途,然后尝试将其缩小到导致实际进行可见更改的方法调用。字符串被切碎、组合和传递的方法太多了,以至于你认为你可以准确地找到你正在寻找的文字。
-
-
@RyanStewart - 就是这样,有很多方法可以将字符串切碎并放在一起。 RegEx \"\w{1,}" 实际上捕获了所有这些,但有些情况像第二行代码这样会给问题增加噪音。识别 setText(String) 的所有实例是您描述的方法,但它并不涵盖所有 UI 组件。例如,在 Android 中,有一些“微调器”,它们是下拉菜单,但会接收可以硬编码的字符串数组。
-
不,我建议的方法是识别所有正在使用的 UI 组件以及它们上导致文本显示给用户的方法。听起来工作量很大,是的,但我认为您不会避免这样做。
标签: java android regex eclipse