MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: a conflicting StringReplace

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56334] Re: [mg56306] a conflicting StringReplace
  • From: DrBob <drbob at bigfoot.com>
  • Date: Fri, 22 Apr 2005 06:23:17 -0400 (EDT)
  • References: <200504210936.FAA05094@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

I imagine StringReplace is making a single pass through the first argument string, not one for each Rule. The first pair that matches a Rule is what matters, not the first Rule that leads to a match.

Bobby

On Thu, 21 Apr 2005 05:36:35 -0400 (EDT), Hui Fang <fangh73 at xmu.edu.cn> wrote:

> I was teaching Mathematica in a college. In the class I was showing them
> some built-in functions about strings. Since this is not a very
> important issue, I didn't spend much time on each function. When I show
> them StringReplace, I gave them the following examples:
> In[1]    StringReplace["abc",{"ab"->"AB"}]
> Out[1]   ABc
>
> In[2]   StringReplace["abc", {"bc"->"BC"}]
> Out[2]   aBC
>
> No problem on those. Now a student tried the following:
> In[3]   StringReplace["abc", {"ab"->"AB", "bc"->"BC"}]
> Out[3]   ABc
>
> Now he asked me why only "ab" is replaced. I said this is because there
> is a conflict because both "ab" and "bc" contains "b". So Mathematica
> will choose the first replacement. I also told him if he changes the
> order, he will get aBC. Now:
> In[4]    StringReplace["abc", {"bc"->"BC","ab"->"AB"}]
> Out[4]    ABc
>
> This is the part I don't understand. Does Mathematica treat those rules
> in their canonical order (since "ab" is before "bc" in canonical
> order.), or in their written order?
>
> Thanks a lot!
>
> Hui Fang
>
>
>
>



-- 
DrBob at bigfoot.com


  • Prev by Date: Re: a conflicting StringReplace
  • Next by Date: Re: Guide to get tex-stuff working in Suse 9.2
  • Previous by thread: a conflicting StringReplace
  • Next by thread: Re: a conflicting StringReplace