anish
anish

Reputation: 7412

Special character escaping

All groovy special character #{\'}${"}/', needs to be replaced by \ in front in a groovy string dynamically

input  : anish$spe{cial
output : anish\$spe\{cial
input  : anish}stack{overflow'
output : anish\}stack\{overflow\'

I have written a sample program in Java, that i want in groovier way

import java.util.regex.*;
import java.io.*;

/**
 * 
 * @author anish
 *
 */
public class EscapeSpecialChar {
    public static void main(String[] args) throws IOException {
        inputString();
    }
    private static void inputString() throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter string to find special characters: ");
        String string = in.readLine();
        // Escape the pattern
        string = escapeRE(string);  
        System.out.println("output: -- " + string);
    }

    // Returns a pattern where all punctuation characters are escaped.
    static Pattern escaper = Pattern.compile("([^a-zA-z0-9])");
    public static String escapeRE(String str) {
        return escaper.matcher(str).replaceAll("\\\\$1");
    }
}

Enter string to find special characters: $Anish(Stack%1231+#$124{}

output: -- \$Anish\(Stack\%1231\+\#\$124\{\}

Upvotes: 1

Views: 34047

Answers (1)

tim_yates
tim_yates

Reputation: 171084

This does what your Java code does:

System.console().with {
  def inStr = readLine 'Enter string to find special characters: '
  def outStr = inStr.replaceAll( /([^a-zA-Z0-9])/, '\\\\$1' )
  println "Output: $outStr"
}

I am still dubious that what I think you are doing is a good idea though... ;-)

Upvotes: 9

Related Questions