2012-12-25 111 views
-1

我正在执行Android应用本地化的过程。此过程中的一个难点是区分用于向用户显示的字符串文本与本地/编程使用的字符串文本之间的区别。Eclipse正则表达式帮助,不包含子字符串

public static String PERSON = "Person"; 
intent.putExtra("isPerson", isPerson); 
myTextView.setText("My name is Mark"); 

什么是正则表达式,我可以用它来给我,其中的文字用引号括起来,但1)不是一个变量声明和2)不是用作一个字符串键一个键的代码行/值映射像第二行一样。理想的目标是让表达式的匹配导致第三行的类型。我可以寻找包含的setText字符串但随后硬编码字符串,如下面将错过:

String firstName = "Mark"; 
myTextView.setText(firstName); 

我设法得到非空的所有字符串由引号括起来:

\"\w{1,}" 

问题在于它太宽泛,给我一切。此外,我希望下面给我,不包含在putExtra他们所有的字符串退货:

(?<!putExtra).\"\w{1,}" 

但可能是因为其返回结果这样不能很好地工作:

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

当我想排除任何包含putExtra子字符串的文本行时,其中“Welcome”使其显示为匹配。

任何帮助您RegEx大师将不胜感激。我正在使用启用了正则表达式的Eclipse的文件搜索功能

+0

不能理解你正在尝试做什么。 – mjosh

+0

我对Android没有太多了解,但对我来说听起来就像你试图找到错误的东西。您可能应该尝试搜索可显示的任何类型组件的所有用法,然后尝试将其缩小到导致实际进行可见更改的方法调用。有很多方法可以将字符串切碎,放在一起,然后绕过来认为您可以准确找到要查找的字面值。 –

+0

@mjosh - “区分用于显示给用户的字符串字面量与本地/编程使用的字符串字面量之间的区别”是我用正则表达式所要做的。 –

回答

0

您正试图解决错误的问题。你的线

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

不应该有一个文字字符串“标题”,而是一个命名常量。正如你至少使用“title”字符串两次(当创建额外的信息,并在activity的onCreate方法中提取时),这应该是一个干净的代码规则的命名常量,以避免幻数和字符串。

按照这种方法,基本上不需要识别正则表达式中的键/值设置器。

+0

谢谢Bananeweizen - 我看到你在说什么,最好的做法是将常用字符串引用标准化为常量。我希望可以通过RegEx避免这类字符串类型,但是在一个常量文件下洗牌可以使可翻译用户字符串的标识更容易。 –

+0

否不是恒定文件。常量是它们所属类的一部分,就像正常(非常量)字段一样。因此,字面字符串“标题”应该是使用它的活动的公共常量。 – Bananeweizen