1

我刚刚在我们代码库的“Utils”类型的类中找到了这个方法。它是很久以前由不再为我们工作的开发人员编写的。它在做什么?它返回什么?!?当然,没有 JavaDocs 或注释。

public static String stripChars(String toChar, String ptn){
    String stripped = "";
    stripped = toChar.replaceAll(ptn, "$1");
    return stripped.trim();
}

提前致谢!

4

5 回答 5

3

本质上,这是一个非常短的别名。这:

stripChars(a, b)

相当于:

a.replaceAll(b, "$1").trim()
于 2012-10-15T17:15:43.877 回答
2

它似乎将“toChar”中与正则表达式“ptn”匹配的所有内容替换为“toChar”中匹配的第一个组

正则表达式有组的概念,例如匹配“year 2012”并替换为“year 1012”,或者“year 2006”替换为“year 1007”(将第一个20改为10)可以通过替换来完成

"year 20([0-9][9-9])" 与 "year 20$1" -- 即匹配整个字符串,然后将其替换为 "year 20",后跟第一组 ( $1)。该组是括号中的第一件事。

无论如何,您的方法然后将“toChar”中与“ptn”匹配的所有内容替换为正则表达式“ptn”中的第一组。因此,给定 stripChars("year 2012", "year 20([0-9][9-9]"); 您将只收到“12”,因为整个文本将匹配并仅被第一组替换。

然后它会触发任何前导或尾随空格。

于 2012-10-15T17:17:51.547 回答
1

它只是replacing一个带有自己subset匹配字符的字符串,然后从两端修剪空格。

例子

因此,如果您希望将一个单词替换为该单词的一系列数字

使用正则表达式\b.*?(\d*).*?\b

然后繁荣,你的replaceAll方法会给出这些结果

hey123wow->123
what666->666
how888->888

$0指整个匹配的字符串,即 hey123wow, what666,how888在本例中

$1指的是(\d*)本例中的 group.ie 即123, 666,888

$2将指本示例中不存在的第二组。

于 2012-10-15T17:14:41.263 回答
1

作为参数方法传递的模式字符串似乎包含一个匹配组,并且对全部替换的调用将把整个匹配替换为与第一个组匹配的部分的模式。您应该查找此方法的调用层次结构,以查找传递给该方法的一些正则表达式以及正在处理的字符串,

于 2012-10-15T17:16:04.663 回答
0
toChar.replaceAll(ptn, "$1");

它将所有出现的ptnin替换为我们不知道它在哪里toChar的捕获组。$1

捕获组是内部的模式brackets ():-

对于以下正则表达式中的 EG:-

"(\\d+)(cd)"

  • $0表示完全匹配
  • $1表示第一个捕获组 ( \\d+)
  • $2表示第二个捕获组 ( cd)

    String str1 = "xyz12cd";
    
    // This will replace `12cd` with the first capture group `12`
    str1 = str1.replaceAll("(\\d+)(cd)", "$1"); 
    System.out.println(str1);
    

想了解更多Regular Expression,可以参考以下链接:-

于 2012-10-15T17:18:49.140 回答