【问题标题】:Eclipse RegEx help, excluding substringsEclipse RegEx 帮助,不包括子字符串
【发布时间】: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


【解决方案1】:

您正在尝试解决错误的问题。你的线路

intent.putExtra("title", "Welcome");

不应该有一个文字字符串“title”,而是一个命名常量。因为您肯定至少使用了两次“标题”字符串(在创建额外信息时,以及在活动 onCreate 方法中提取它时),所以根据干净代码规则,它应该是一个命名常量,以避免幻数和字符串。

按照这种方法,基本上不需要在你的正则表达式中识别key/value setter了。

【讨论】:

  • 感谢 Bananeweizen - 我明白你的意思,将常见的字符串引用标准化为常量是最佳实践。我希望我可以通过 RegEx 避免这类字符串文字,但是将它们改组到一个常量文件下可以使识别面向用户的可翻译字符串更容易。
  • 没有。不是一个常量文件。常量是它们所属类的一部分,就像普通(非常量)字段一样。因此,文字字符串“title”应该是使用它的活动的公共常量。
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多