Commons Lang substitution

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Commons Lang substitution

Alex Soto
Hi I have two special requirements that I think that Common-Lang
StrSubstitutor does not cover, but I would like to know if it is correct or
not.

The first requirement is that I would like to know if there is a way to
make StrSubstitutor works with using simple character as prefix and no
suffix. For example:

"This is my $name and I am happy"

I have tried  by using new StrSubstitutor(map, "$", "") and
StrSubstitutor(map, "$", " ") but no luck.

I have tried with commons-lang and commons-lang3.

The second one is that I would like to know if there is a way to force that
in case of no substitution found, the var is replaced with white space
instead of untouch it.

Thank you very much for your attention.

Alex.
Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Anthony Brice
I could be wrong, but I do believe StrSubstitor requires a prefix and
suffix. I don't think the class will replace variables that aren't in the
map either, unless you write a custom StrLookup that returns an empty
string for variables not previously defined.
On Sat, Nov 14, 2015 at 11:02 AM Alex Soto <[hidden email]> wrote:

> Hi I have two special requirements that I think that Common-Lang
> StrSubstitutor does not cover, but I would like to know if it is correct or
> not.
>
> The first requirement is that I would like to know if there is a way to
> make StrSubstitutor works with using simple character as prefix and no
> suffix. For example:
>
> "This is my $name and I am happy"
>
> I have tried  by using new StrSubstitutor(map, "$", "") and
> StrSubstitutor(map, "$", " ") but no luck.
>
> I have tried with commons-lang and commons-lang3.
>
> The second one is that I would like to know if there is a way to force that
> in case of no substitution found, the var is replaced with white space
> instead of untouch it.
>
> Thank you very much for your attention.
>
> Alex.
>
Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Benedikt Ritter-4
Hello,

2015-11-14 22:25 GMT+01:00 Anthony Brice <[hidden email]>:

> I could be wrong, but I do believe StrSubstitor requires a prefix and
> suffix. I don't think the class will replace variables that aren't in the
> map either, unless you write a custom StrLookup that returns an empty
> string for variables not previously defined.
>

Yes, this is correct. The replace with blank could be implemented using a
custom StrLookup. However, it is not possible to configure a StrSubstitutor
to use only a starting character.

Benedikt


> On Sat, Nov 14, 2015 at 11:02 AM Alex Soto <[hidden email]> wrote:
>
> > Hi I have two special requirements that I think that Common-Lang
> > StrSubstitutor does not cover, but I would like to know if it is correct
> or
> > not.
> >
> > The first requirement is that I would like to know if there is a way to
> > make StrSubstitutor works with using simple character as prefix and no
> > suffix. For example:
> >
> > "This is my $name and I am happy"
> >
> > I have tried  by using new StrSubstitutor(map, "$", "") and
> > StrSubstitutor(map, "$", " ") but no luck.
> >
> > I have tried with commons-lang and commons-lang3.
> >
> > The second one is that I would like to know if there is a way to force
> that
> > in case of no substitution found, the var is replaced with white space
> > instead of untouch it.
> >
> > Thank you very much for your attention.
> >
> > Alex.
> >
>



--
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter
Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Jörg Schaible
Benedikt Ritter wrote:

> Hello,
>
> 2015-11-14 22:25 GMT+01:00 Anthony Brice <[hidden email]>:
>
>> I could be wrong, but I do believe StrSubstitor requires a prefix and
>> suffix. I don't think the class will replace variables that aren't in the
>> map either, unless you write a custom StrLookup that returns an empty
>> string for variables not previously defined.
>>
>
> Yes, this is correct. The replace with blank could be implemented using a
> custom StrLookup. However, it is not possible to configure a
> StrSubstitutor to use only a starting character.

End "character" could be any non-alphanum character. Isn't it what the
StrMatcher could be used for?

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Alex Soto
Hi, thank you for your answers, Jörg I think that StrMatcher is for
implementing where you want to get information to be replaced on the
string, not for parsing issues.

El dl., 16 nov. 2015 a les 21:38, Jörg Schaible (<[hidden email]>)
va escriure:

> Benedikt Ritter wrote:
>
> > Hello,
> >
> > 2015-11-14 22:25 GMT+01:00 Anthony Brice <[hidden email]
> >:
> >
> >> I could be wrong, but I do believe StrSubstitor requires a prefix and
> >> suffix. I don't think the class will replace variables that aren't in
> the
> >> map either, unless you write a custom StrLookup that returns an empty
> >> string for variables not previously defined.
> >>
> >
> > Yes, this is correct. The replace with blank could be implemented using a
> > custom StrLookup. However, it is not possible to configure a
> > StrSubstitutor to use only a starting character.
>
> End "character" could be any non-alphanum character. Isn't it what the
> StrMatcher could be used for?
>
> Cheers,
> Jörg
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Jörg Schaible
Alex Soto wrote:

> Hi, thank you for your answers, Jörg I think that StrMatcher is for
> implementing where you want to get information to be replaced on the
> string, not for parsing issues.

Instead of guessing, I'd rather have a look into the Javadocs of
StrSubstitutor.

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Woonsan Ko-3
I think Jörg is right.

You may change the suffix StrMather through
#setVariableSuffixMatcher() on a StrSubstitutor.
I haven't tried it, but it should be something like this example:

final Map<String, V> valueMap = ...;
StrSubstitutor  subst = new StrSubstitutor(valuesMap, "$", ""); //
NONE_MATCHER for suffix initially
subst.setVariableSuffixMatcher(StrMatcher.trimMatcher());

HTH,

Woonsan


On Tue, Nov 17, 2015 at 2:20 PM, Jörg Schaible <[hidden email]> wrote:

> Alex Soto wrote:
>
>> Hi, thank you for your answers, Jörg I think that StrMatcher is for
>> implementing where you want to get information to be replaced on the
>> string, not for parsing issues.
>
> Instead of guessing, I'd rather have a look into the Javadocs of
> StrSubstitutor.
>
> Cheers,
> Jörg
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Alex Soto
Thanks for your help but sadly doesn't work as expected. Look:

Map<String, String> map = new HashMap<String, String>();
        map.put("version", "1");

        StrSubstitutor strSubstitutor = new StrSubstitutor(map, "$", "");
        strSubstitutor.setVariableSuffixMatcher(StrMatcher.trimMatcher());
        System.out.println(strSubstitutor.replace("The $version is
awesome"));

prints: The 1is awesome

Notice that it eats the white space.

Alex.



El dt., 17 nov. 2015 a les 23:19, Woonsan Ko (<[hidden email]>) va
escriure:

> I think Jörg is right.
>
> You may change the suffix StrMather through
> #setVariableSuffixMatcher() on a StrSubstitutor.
> I haven't tried it, but it should be something like this example:
>
> final Map<String, V> valueMap = ...;
> StrSubstitutor  subst = new StrSubstitutor(valuesMap, "$", ""); //
> NONE_MATCHER for suffix initially
> subst.setVariableSuffixMatcher(StrMatcher.trimMatcher());
>
> HTH,
>
> Woonsan
>
>
> On Tue, Nov 17, 2015 at 2:20 PM, Jörg Schaible <[hidden email]>
> wrote:
> > Alex Soto wrote:
> >
> >> Hi, thank you for your answers, Jörg I think that StrMatcher is for
> >> implementing where you want to get information to be replaced on the
> >> string, not for parsing issues.
> >
> > Instead of guessing, I'd rather have a look into the Javadocs of
> > StrSubstitutor.
> >
> > Cheers,
> > Jörg
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [hidden email]
> > For additional commands, e-mail: [hidden email]
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Commons Lang substitution

Woonsan Ko-3
Hi Alex,

It seems working as it was designed, but probably not for your expectation:
- When using "${" and "}", "The ${version} is awesome" would be
substituted to "The 1 is awesome", removing the prefix and suffix.
- In the same way, when using "$" and a whitespace, "The $version is
awesome" would be substituted to "The 1is awesome", removing the
prefix and the whitespace as suffix. ;-)

Anyway, I don't think StrSubstitutor was considered in the way you
want to use now.
If you can safely assume that a space should come after a variable
expression, then maybe you can override
StrSubstitutor#resolveVariable(String, StrBuilder, int, int) to append
a space.
If you can't but you need to keep the white space given in the input,
maybe you can implement a special variable suffix matcher to keep the
last found white space character and use it in the overriden
#resolveVariable(). But this is just an idea. I guess you need to try
some possible approaches..

Regards,

Woonsan


On Wed, Nov 18, 2015 at 4:34 AM, Alex Soto <[hidden email]> wrote:

> Thanks for your help but sadly doesn't work as expected. Look:
>
> Map<String, String> map = new HashMap<String, String>();
>         map.put("version", "1");
>
>         StrSubstitutor strSubstitutor = new StrSubstitutor(map, "$", "");
>         strSubstitutor.setVariableSuffixMatcher(StrMatcher.trimMatcher());
>         System.out.println(strSubstitutor.replace("The $version is
> awesome"));
>
> prints: The 1is awesome
>
> Notice that it eats the white space.
>
> Alex.
>
>
>
> El dt., 17 nov. 2015 a les 23:19, Woonsan Ko (<[hidden email]>) va
> escriure:
>
>> I think Jörg is right.
>>
>> You may change the suffix StrMather through
>> #setVariableSuffixMatcher() on a StrSubstitutor.
>> I haven't tried it, but it should be something like this example:
>>
>> final Map<String, V> valueMap = ...;
>> StrSubstitutor  subst = new StrSubstitutor(valuesMap, "$", ""); //
>> NONE_MATCHER for suffix initially
>> subst.setVariableSuffixMatcher(StrMatcher.trimMatcher());
>>
>> HTH,
>>
>> Woonsan
>>
>>
>> On Tue, Nov 17, 2015 at 2:20 PM, Jörg Schaible <[hidden email]>
>> wrote:
>> > Alex Soto wrote:
>> >
>> >> Hi, thank you for your answers, Jörg I think that StrMatcher is for
>> >> implementing where you want to get information to be replaced on the
>> >> string, not for parsing issues.
>> >
>> > Instead of guessing, I'd rather have a look into the Javadocs of
>> > StrSubstitutor.
>> >
>> > Cheers,
>> > Jörg
>> >
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [hidden email]
>> > For additional commands, e-mail: [hidden email]
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]