0

我有一个字符串如下:

“这是@awesome @dude”

从这个字符串中我想提取 awesome and dude 并创建一个字符串

 output==> "awesome,dude"

所以我的代码如下:

Matcher matcher = Pattern.compile("(?<=@)\\w+").matcher(textStr);
while (matcher.find()){
    mergedStr += matcher.group() +",";
}

但这最终创造了一个神器

output==> "awesome,dude,"  //<-- egghh comma.. in the end

有什么更好的方法来解决这个问题。

4

5 回答 5

3

另一种方法:

boolean needComma = false;
while (blah, blah, blah) {
    if (needComma) {
        string += ",";
    }
    string += word;
    needComma = true;
}

但是有十几种不同的方法。

于 2013-06-04T21:08:53.560 回答
1

这是一种选择:

Matcher matcher = Pattern.compile("(?<=@)\\w+").matcher(textStr);
while (matcher.find()){
    if (!mergedStr.isEmpty())
      mergedStr += ",";
    mergedStr += matcher.group();
}
于 2013-06-04T21:04:55.917 回答
1

这是另一种常见的方法:

Matcher matcher = Pattern.compile("(?<=@)\\w+").matcher(textStr);
StringBuilder sb = new StringBuilder();
while (matcher.find()){
    sb.append(matcher.group()).append(",");
}
return sb.toString().replaceAll(",$", "");

如果你不想使用正则表达式,你可以这样做:

Matcher matcher = Pattern.compile("(?<=@)\\w+").matcher(textStr);
StringBuilder sb = new StringBuilder();
while (matcher.find()){
    sb.append(matcher.group()).append(",");
}
if (sb.length() == 0) {
    return "";
}
else {
    return sb.toString().substring(0, sb.length() - 1);
} 
于 2013-06-04T21:07:19.227 回答
1

我经常用于这种事情的一个有用的模式是附加第一项,然后附加以分隔符开头的其余项目。这避免了循环或后处理中不必要的条件以删除尾随分隔符。

我知道,微优化等等,等等,地狱的第六圈,等等,等等,但只是包括在这里供您娱乐:

    Matcher matcher = Pattern.compile("(?<=@)\\w+").matcher(textStr);
    StringBuilder mergedStr = new StringBuilder();
    if (matcher.find()) {
      mergedStr.append(matcher.group());
      while (matcher.find()) {
        mergedStr.append(',').append(matcher.group());
      }
    }
    return mergedStr.toString();

此外,我不是 100% 相信用线性算法 ( StringBuilder) 替换二次算法(字符串连接)在坏的意义上属于微优化。

于 2013-06-04T22:58:44.783 回答
0
String input = "@awesome@dude";
        List<String> strSplit = new ArrayList<String>();
        String result = "";

        Matcher matcher = Pattern.compile("(?<=@)\\w+").matcher(input);
        while (matcher.find()){
            strSplit.add(matcher.group());

        }
        for(int j = 0; j< strSplit.size(); j++){
            result = result + strSplit.get(j);
            if(j < strSplit.size() -1){
                result = result+",";
            }
        }
        System.out.println("Result : " + result);
于 2013-06-04T21:17:59.817 回答