【问题标题】:Why the second argument is not being taken as regex?为什么第二个参数不被视为正则表达式?
【发布时间】:2012-06-13 21:34:23
【问题描述】:

我遇到了一个关于 java regex 的有趣问题 Is there a regular expression way to replace a set of characters with another set (like shell tr command)? 所以我尝试了以下方法:

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

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

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

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

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

【问题讨论】:

  • 这个问题的答案是一个非常明确的“否”。为什么你认为这会奏效?

标签: java regex string


【解决方案1】:

这就是 replaceAll 的工作方式。

API:

public String replaceAll(String regex, String replacement)

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

【讨论】:

  • 谢谢,我明白了。我应该仔细查看 API。
【解决方案2】:

链接问题的答案是非常明确的“否”,所以这不足为奇。

documentation 可以看出,第二个参数确实是用作替换的常规字符串:

参数:

  • regex – 这个字符串要匹配的正则表达式
  • replacement – 每个匹配项要替换的字符串

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果你想把小写转大写,String 类中有一个 toUpperCase 函数。对于与 tr 实用程序等效的功能,我认为 Java 不支持(直到 Java 7)。

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

      【讨论】:

      • 我并不是想将小写转换为大写。我只是想知道正则表达式在这种情况下是如何工作的。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:
         public String replaceAll(String regex, String replacement)
        

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

         toUpperCase() 
        

        方法

        【讨论】:

          【解决方案7】:

          您应该查看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!
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-06-02
            • 2021-10-22
            • 1970-01-01
            • 2012-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多