【发布时间】:2011-04-21 05:17:31
【问题描述】:
什么是正则表达式。还有..?
if(key.matches(".")) {
do something
}
匹配接受要求正则表达式的字符串。现在我需要删除我的 MAP 中的所有 DOT。
【问题讨论】:
什么是正则表达式。还有..?
if(key.matches(".")) {
do something
}
匹配接受要求正则表达式的字符串。现在我需要删除我的 MAP 中的所有 DOT。
【问题讨论】:
...
[.]{1}
或
[.]{2}
?
【讨论】:
[+*?.] 大多数特殊字符在方括号内没有意义。此表达式匹配 +、*、? 中的任何一个或点。
【讨论】:
。匹配任何需要转义的字符,即Java字符串中的\.或\\.(因为\本身在Java字符串中具有特殊含义。)
然后您可以使用 \.\. 或 \.{2} 来精确匹配 2 个点。
【讨论】:
\. 是正则表达式,但要在 Java 中为该表达式构造字符串,您将需要 \\.,因为在 Java 字符串中使用 \n、\t 等. 所以 \\ 对于字符串中的文字 \ 是必需的。另外,请注意String.matches 需要正则表达式来匹配 整个 字符串。如果要进行子字符串搜索,则需要使用 Matcher.find
key.contains 并且根本不需要正则表达式。
Pattern#quote(String) 转义保留的正则表达式字符
如果您只想替换字符串中的点,请使用String.Replace()。替代方法是将Pattern-Matcher 与StringBuilder 一起使用,这为您提供了更大的灵活性,因为您可以找到点之间的组。如果使用后者,我建议您忽略带有"\\.+" 的空条目。
public static int count(String str, String regex) {
int i = 0;
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while (m.find()) {
m.group();
i++;
}
return i;
}
public static void main(String[] args) {
int i = 0, j = 0, k = 0;
String str = "-.-..-...-.-.--..-k....k...k..k.k-.-";
// this will just remove dots
System.out.println(str.replaceAll("\\.", ""));
// this will just remove sequences of ".." dots
System.out.println(str.replaceAll("\\.{2}", ""));
// this will just remove sequences of dots, and gets
// multiple of dots as 1
System.out.println(str.replaceAll("\\.+", ""));
/* for this to be more obvious, consider following */
System.out.println(count(str, "\\."));
System.out.println(count(str, "\\.{2}"));
System.out.println(count(str, "\\.+"));
}
输出将是:
--------kkkkk--
-.--.-.-.---kk.kk.k-.-
--------kkkkk--
21
7
11
【讨论】:
你应该使用包含不匹配
if(nom.contains("."))
System.out.println("OK");
else
System.out.println("Bad");
【讨论】: