我们对包含任意标点符号的任意字符串进行了大量的词法处理。对于是使用魔术字符/字符串还是符号常量,我存在分歧。
尽管大多数示例都是 Java,但这些示例应被视为与语言无关。
标点符号具有语义作用并应被标识为常量的明显示例:
File.separator不是"/"或"\\";// 很简单,因为它依赖于操作系统
我写XML_PREFIX_SEPARATOR = ":";
但是,假设我需要""用空字符串 ` 替换所有示例。我可以写:
s = s.replaceAll("\"\"", "");
或者
s = s.replaceAll(S_QUOT+S_QUOT, S_EMPTY);
(我已将所有常见的标点符号定义为 S_FOO(字符串)和 C_FOO(字符))
支持魔术字符串/字符:
- 它更短
- 阅读是很自然的(有时)
- 命名常量可能不熟悉(
C_APOSvs'\'')
支持常数
- 更难打错字(例如
"''" + '"'对比S_APOS+S_APOS + C_QUOT) - 它消除了转义问题 正则表达式应该是
"\\s+"or"\s+"or"\\\\s+"吗? - 很容易在代码中搜索标点符号
(这是有限制的——即使正则表达式语法是所有编程中认知功能障碍最严重的部分之一,我也不会以这种方式编写正则表达式。我认为我们需要更好的语法。)