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