我知道以下内容有效,但可读性不强,有没有办法在不添加注释的情况下使其在代码本身中更具可读性?
//Start her off
String sampleregex = "\\\\";
if (input.matches(sampleregex))
//do something
//do some more
我知道以下内容有效,但可读性不强,有没有办法在不添加注释的情况下使其在代码本身中更具可读性?
//Start her off
String sampleregex = "\\\\";
if (input.matches(sampleregex))
//do something
//do some more
为什么不
if (input.contains("\\")) {
}
因为您似乎只是在寻找反斜杠?
假设您的意思是"\\\\"
而不是"////"
:
\Q
你可以用and来转义它\E
,它会删除一层反斜杠: "\\Q\\\E"
,但这并没有那么好。您也可以使用Pattern.quote("\\")
它在运行时进行转义。但就个人而言,我会坚持使用"\\\\"
.
(顺便说一句,您需要其中四个,因为它们\
用于转义正则表达式引擎和 Java 字符串中的内容,因此您需要转义一次,以便正则表达式引擎知道您没有尝试转义其他任何内容(所以就是这样\\
) ; 那么你需要转义这两个,这样 Java 就知道你没有转义字符串中的某些内容(所以就是\\\\
))。
/
不是正则表达式元字符,因此正则表达式字符串"/"
匹配单个斜杠,并"////"
连续匹配四个。
我想您的意思是要询问是否匹配单个反斜杠,而不是正斜杠,在这种情况下,不,您需要输入"\\\\"
正则表达式字符串文字以匹配单个反斜杠。(而且我需要输入八个才能让四个出现在 SO--该死的!)
我的解决方案与 Soldier.moth 的类似,但有所不同。创建一个包含常用正则表达式的常量文件并不断添加。作为常量的表达式甚至可以组合起来,为构建正则表达式提供一个抽象层,但最终它们仍然经常会变得混乱。
public static final String SINGLE_BACKSLASH = "\\\\";
我想到的一个解决方案是
String singleSlash = "\\\\";
if(input.matches(singleSlash))
//...
为变量和常量使用更好的名称,并逐步组合它们是无需注释的好方法,例如:
final string backslash = "\\";
final string regexEscapedBackslash = backslash + backslash;
if (input.matches(regexEscapedBackslash)) {
...