GiLA3
GiLA3

Reputation: 409

How to change variables with in a string into a Map

I have let's say 100 variables in a string , my requirement is to automatically create a Map out of the string:

String str = "$$test$$ $$test2$$ $$test$$ $$test3$$"  

Expected Result:

["test":test, "test2":test2, "test3":test3];

EDIT (for dsharew) This is the last version of my code

def list = queryText.findAll(/\$\$(.*?)\$\$/)

def map = [:]
list.each{
log.debug(it)
    it = it.replace("\$\$", "")
log.debug(it)
    map.putAt(it, it)
}

log.debug(list)
log.debug(map)
queryText = queryText.replaceAll(/\$\$(.*?)\$\$/) { k -> map[k[1]] ?: k[0] }
log.debug(queryText)

And the logs print the following result:

$$test$$
test
$$test2$$
test2
$$test$$
test
$$test3$$
test3
[$$test$$, $$test2$$, $$test$$, $$test3$$]
{test=test, test2=test2, test3=test3}
test test2 test test3

Upvotes: 0

Views: 89

Answers (3)

Mario
Mario

Reputation: 101

Following @dsharew answer, I've reduced it a little bit more:

​def queryText = "\$\$test\$\$ \$\$test2\$\$ \$\$test\$\$ \$\$test3\$\$"    

def resultMap = queryText
  .findAll(/\$\$(.*?)\$\$/)
  .collectEntries { String next ->         
    [next.replace("\$\$", "")] * 2                    
  } 
  • collectEntries can be used to return a map from a collection if it returns a map or a tuple for every entry in the collection.

  • If you multiply a list by n, you are creating a bigger list with n times its content

BTW cool problem!

Upvotes: 1

John Mercier
John Mercier

Reputation: 1705

This is what I came up with

String str = '$$test$$ $$test2$$ $$test$$ $$test3$$'
str.replaceAll('\\$\\$', '').split(' ').collectEntries { [(it):it] }

Upvotes: 0

dsharew
dsharew

Reputation: 10665

This should do what you want:

def queryText = "\$\$test\$\$ \$\$test2\$\$ \$\$test\$\$ \$\$test3\$\$"
toMap(queryText.findAll(/\$\$(.*?)\$\$/));

def toMap(list){
    def map = [:]
    list.each{
        it = it.replace("\$\$", "")
        map.putAt(it, it)
    };
    println map;
    return map;

}

Upvotes: 1

Related Questions