【问题标题】:Case-insensitive search and replace不区分大小写的搜索和替换
【发布时间】:2011-12-22 22:35:00
【问题描述】:

我有以下字符串,如何在 Java 中搜索和替换它?

之前

*animal is a *ANImal and *Bird is a *bIrd.

搜索替换后应该是 *animal = Dog and *bird = 孔雀

Dog is a Dog and Peacock is a Peacock.

我已经尝试替换这种模式的出现 - (?i)\\*animal 但它不起作用。我做错了什么?

【问题讨论】:

  • 使用 Pattern.quote() 示例:str.replaceAll("(?i)"+Pattern.quote("*animal"), "Dog") 与 "*bird" 相同

标签: java regex string search replace


【解决方案1】:
   public String replaceStrPattern(String str, String pattern, String replaceWith) {

            String newStr = str;
            String nonAlphaNumeric = "[^a-zA-Z0-9]";

    String[] words = str.split(" ");
    for(String word : words) {
               word = word.replaceAll(nonAlphaNumeric, "").trim();
        if(word.equalsIgnoreCase(pattern))
            newStr = newStr.replace(word, replaceWith);
    }

        return newStr;      
}

【讨论】:

  • 是的,如前所述,这可能会解决这个特定问题,但它会破坏尝试为特定案例找到通用解决方案的目的,这总是比找到特定解决方案更可取只会解决一种情况。拿起一本关于设计模式的好书读一读,非常值得;-)
  • 这个想法可以概括一下,如果你在给出毫无意义的评论之前考虑一下......这个想法是拆分句子(你如何拆分它取决于输入和文本格式)并替换单个单词,匹配特定模式。
  • 如果您认为该评论毫无意义,我深表歉意 - 它的目的是建设性的,而不是居高临下的。我的道歉,也许我可以更清楚。关键是,虽然该方法有效,但不需要硬编码字符串且通用的解决方案将对更多人有所帮助。毕竟,模式不是重新发明轮子,而是重复使用可应用于一系列其他类似问题的方法。
  • 我同意这一点,但上述解决方案本身有一个模式,它需要 1 分钟。抽象硬编码部分并使其通用......我会说它更多的是一种算法方法而不是一种设计模式,你可以采取多个方向来解决它 - 替换、正则表达式、StringUtils ......它们都是有效的跨度>
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2012-02-03
  • 2012-01-31
相关资源
最近更新 更多