0

我有一个程序,我想在开头过滤一组“+”的字符串。例如:

+++Adam is working very well. 
++Adam is working well. 
+Adam is doing OK. 

我如何只选择每个特定案例(即只有一个加号,只有两个加号,只有三个加号)?我通常会返回以 + 开头的任何内容。

我编译了以下正则表达式模式,但我要么只得到一个回报(通常是两个 ++),要么得到所有回报:

public static String regexpluschar = "^\\Q+\\E{1}[\\w <]";
public static String regexpluspluschar = "^\\Q+\\E{2}[\\w <]";
public static String regexpluspluspluschar = "^\\Q+\\E{3}[\\w <]";
Pattern plusplusplus = Pattern.compile(regexpluspluspluschar);
Pattern plusplus = Pattern.compile(regexpluspluschar);
Pattern plus = Pattern.compile(regexpluschar);

然后我尝试使用 Matcher 类进行查找 - 我使用了 .find() 和 .matches() 但没有得到我想要的结果(此处为 java+regex newbie alert)。

Matcher matcherplusplusplus = plusplusplus.matcher(check);
Matcher matcherplusplus = plusplus.matcher(check);
Matcher matcherplus = plus.matcher(check);

//OK we have 3+'s
if ((matcherplusplusplus.find())==true){
System.out.println("Filtering 3 +s.");
System.out.println("filter is " + filter + " in the 3 + filter.");
String toChange = getItem(i);
setItemFiltered(i, toChange);
}

//OK - we have 2 +'s
if ((matcherplusplus.find())==true){
System.out.println("Filtering 2 +s.");
System.out.println("filter is " + filter + " in the 2 + filter.");
String toChange = getItem(i);
setItemFiltered(i, toChange);   
}

//OK - we have 1 +'s
if ((matcherplus.find())==true){
System.out.println("Filtering 1 +.");
System.out.println("filter is " + filter + " in the 1 + filter.");
String toChange = getItem(i);
setItemFiltered(i, toChange);   
}

对于非常好奇的人,上面的 if 嵌入在一个循环中,该循环围绕一些 JTextFields 循环。完整代码在: http: //pastebin.ca/2199327

4

2 回答 2

2

为什么不更简单:

public static String regexpluschar = "^\\+[\\w <]";
public static String regexpluspluschar = "^\\+{2}[\\w <]";
public static String regexpluspluspluschar = "^\\+{3}[\\w <]";

甚至

public static String regexpluschar = "^\\+[^\\+]";
public static String regexpluspluschar = "^\\+{2}[^\\+]";
public static String regexpluspluspluschar = "^\\+{3}[^\\+]";

编辑:它正在我的测试程序上工作,但我不得不删除你的特定代码:

String toChange = getItem(i);
setItemFiltered(i, toChange);

证明:我的输出是:

Filtering 3 +s.
+++Adam is working very well.  is in the 3 + filter.
Filtering 2 +s.
++Adam is working well.  is in the 2 + filter.
Filtering 1 +.
+Adam is doing OK.  is in the 1 + filter.

您的过滤器正在工作,但您的特定代码可能无法...(也许看看setItemFiltered?)

于 2012-08-30T09:46:30.440 回答
1

我在想这样的事情会更容易:

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("^(\\+{1,3}).*");

    Matcher matcher = pattern.matcher(<your text>);
    if (matcher.matches()) {
        String pluses = matcher.group(1);
        switch (pluses.length()) {

        }
    }

}

如果您想确定++++This is insane不匹配,则将模式更改为

Pattern pattern = Pattern.compile("^(\\+{1,3})[^+].*");
于 2012-08-30T10:00:33.267 回答