Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8165200

String.replaceAll throwing Exception when trying to replace with Slash "\"

XMLWordPrintable

    • generic
    • generic

      FULL PRODUCT VERSION :
      java version "1.8.0_92"
      Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 6.1.7601]

      A DESCRIPTION OF THE PROBLEM :
      StringObject.replaceAll(the_regex_here, "\\");

      throwing exception and instead of replacing the thing.
      NOTE: it's only happening when there's only single \ characters in the replaceWith field.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      // THE LAST TWO STATEMENTS PRODUCES THE EXCEPTION

      public class RegexCheck {
      public static void main(String[] args) {
      System.out.println("abc\\\\def".replaceAll("\\\\", "."));
      System.out.println("abc..def".replaceAll("\\.\\.", "."));
      System.out.println("abc..def".replaceAll("\\.\\.", "\\*"));
      System.out.println("abc..def".replaceAll("\\.\\.", "\\\\"));
      System.out.println("abc..def".replaceAll("\\.\\.", "\\"));
      System.out.println("abc\\\\def".replaceAll("\\\\", "\\"));
      }
      }

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      abc..def
      abc.def
      abc*def
      abc\def
      abc\def
      ACTUAL -
      abc..def
      abc.def
      abc*def
      abc\def
      Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missing
              at java.util.regex.Matcher.appendReplacement(Unknown Source)
              at java.util.regex.Matcher.replaceAll(Unknown Source)
              at java.lang.String.replaceAll(Unknown Source)
              at RegexCheck.main(RegexCheck.java:7)

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missing
              at java.util.regex.Matcher.appendReplacement(Unknown Source)
              at java.util.regex.Matcher.replaceAll(Unknown Source)
              at java.lang.String.replaceAll(Unknown Source)
              at RegexCheck.main(RegexCheck.java:7)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      SUPPORT :
      YES

            psonal Pallavi Sonal (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: