我有一段代码:
String textFieldContents = myJTextField.getText(); // javax.swing.JTextField
// If two consecutive pipes exist in the text, or if the text ends with a pipe, print a statement.
if(textFieldContents.matches("||") || textFieldContents.endsWith("|"))
System.out.println("We have a winner!");
当myJTextField
文本字段(Swing组件)为空且其中没有文本时,将打印We have a winner!
文本。为什么呢?
答案 0 :(得分:5)
请注意,public boolean matches(String regex)需要正则表达式。
您需要转发special char |
。
(转义正则表达式由\
完成,但在Java中,\
写为\\
)。
您还可以使用Pattern#quote:
textFieldContents.matches(Pattern.quote("|"));
请参阅@JimDagg答案(+1)以了解为什么它总是在您的情况下返回 true 。
答案 1 :(得分:1)
管道符是Java正则表达式中的特殊字符。它实际上是一个"或"。你的正则表达式最终说"匹配零个字符或零个字符",这在字符串中的任何地方都是真的。使用正则表达式中的反斜杠转义它将解决问题...
但Java字符串中的反斜杠也有特殊含义,所以你必须转义逃避管道的反斜杠!!您最终必须使用\\|
,这将生成正则表达式\|
,这会在管道符|
上产生匹配。
答案 2 :(得分:0)
String.matches()使用正则表达式匹配与输入字符串。在正则表达式中,'|'具有特殊含义和它(用作ORing)。因此,您需要显式地转义此特殊字符,以避免被用作特殊字符。
使用类似的东西:
if(textFieldContents.matches("\\|\\|"))
答案 3 :(得分:0)
|
是一个使用正则表达式的特殊字符,你需要逃避字符来逐字地使用它们。如果你只是想知道某处是否有两个连续的管道,你还需要吸收任何预处理和尾随的特征。
if(textFieldContents.matches(".*\\|\\|.*") || textFieldContents.endsWith("|"))
System.out.println("We have a winner!");