-2

我遇到了一个关于 java regex 的有趣问题 是否有正则表达式方法可以用另一组字符替换一组字符(如 shell tr​​ 命令)? 所以我尝试了以下方法:

                String a = "abc";
                a = a.replaceAll("[a-z]", "[A-Z]");

现在,如果我得到 print a 输出是

                [A-Z][A-Z][A-Z]

在这里,我认为编译器将第一个参数作为 gegex,而不是第二个参数。

那么这段代码有什么问题还是其他原因呢???

4

7 回答 7

4

这就是 replaceAll 的工作方式。

请参阅API

public String replaceAll(String regex, String replacement)

用给定的替换替换此字符串中与给定正则表达式匹配的每个子字符串。

于 2012-06-13T10:21:52.337 回答
2

相关问题的答案是非常明确的“否”,因此这不足为奇。

正如您从文档中看到的那样,第二个参数确实是用作替换的常规字符串:

参数:

  • regex– 这个字符串要匹配的正则表达式
  • replacement– 为每个匹配替换的字符串
于 2012-06-13T10:23:18.843 回答
1

第二个参数是简单的字符串,它将根据API被替换

于 2012-06-13T10:20:09.517 回答
0

如果要将小写转换为大写,可以在 String 类中使用 toUpperCase 函数。对于tr实用程序的等效功能,我认为 Java 不支持(直到 Java 7)。

替换字符串通常按字面意思表示,除了$nn 表示正则表达式中捕获组的编号的序列。这将使用匹配中捕获的字符串作为替换。

于 2012-06-13T10:20:12.120 回答
0

我认为正则表达式是一种表达条件的方式(即给定的字符串是否与该表达式匹配)。考虑到这一点,您要问的意思是“请用……另一个条件替换我的字符串中匹配的内容”,这没有多大意义。

现在,通过尝试了解您要查找的内容,我觉得您想在字符类之间找到一些自动映射(例如 [az] -> [AZ])。据我所知,这不存在,您必须自己编写(前面提到的 toUpperCase() 除外)

于 2012-06-13T10:29:41.287 回答
0
 public String replaceAll(String regex, String replacement)

第一个参数是正则表达式,如果子字符串与将被第二个参数替换的模式匹配,如果你想将小写转换为大写使用

 toUpperCase() 

方法

于 2012-06-13T10:30:01.923 回答
0

您应该查看jtr。使用示例:

String hello = "abccdefgdhcij";
CharacterReplacer characterReplacer;

try {
    characterReplacer = new CharacterReplacer("a-j", "Helo, Wrd!");
    hello = characterReplacer.doReplacement(hello);
} catch(CharacterParseException e) {
}

System.out.println(hello);

输出:

Hello, World!
于 2012-06-13T13:34:23.330 回答