替换String中的子字符串

时间:2016-03-07 17:23:02

标签: java string replace

我16岁并且正在努力学习Java,我有一篇文章,我的叔叔给了我一些在Java中可以做的事情。其中之一就是编写并执行一个程序,它将接受扩展消息作为字符串,如

  

每次看到这幅画,她都很高兴

并将单词替换为he。

  每次看到这幅画,他都很高兴。

这部分很简单,但是他希望我能够接受任何形式的她并将其替换为我们喜欢的sheheShe到{{1} },Heshe?he?she.he.she'等等。有人可以帮我制作一个程序来实现这一目标。

我有这个

he'

如果这不是找到这样的答案的合适网站,您可以将我重定向到回答此类问题的网站吗?

2 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是使用正则表达式(正则表达式)。正则表达式允许您匹配单词的模式或类别,以便您可以处理一般情况。考虑一下您已列出的案例:

(她对他,她对他,她?对他?,她对他。,她对他'等等)

这些案件之间有什么共同之处?你能想到一些适用于所有这些转变的一般规则吗?

但是也要考虑一些你尚未列出的案例:例如,正如你现在所写的那样,你的代码将会改变“灰烬”这个词。"到" ahes"因为" s"包含"她。"正确编写的正则表达式允许您避免这种情况。

在深入研究正则表达式之前,请尝试用简单的英语表达一条规则或一套规则,以表示您想要替换的内容以及应该替换的内容。

然后,learn some regex并尝试应用这些规则。

最后,尝试编写一些测试(即使用JUnit)来处理各种情况,这样你就可以看到你的代码适用于哪些情况以及哪些情况不适用。

完成此操作后,如果某些内容仍无效,请随时在此处发布一个新问题,向我们展示您的代码并说明哪些内容无效。我们很乐意提供帮助。

答案 1 :(得分:1)

我会推荐这个正则表达式来解决这个问题。您似乎必须单独搜索和替换大写@(title: String) @tab1 = { <li>Content for tab 1</li> } @tab2 = { <li>Content for tab 2</li> } @main(title, Seq(tab1, tab2)) { <p>This is some content</p> } 和小写S

s

说明:

  1. 模式String modified = original .replaceAll("(she)(\\W)", "he$2") .replaceAll("(She)(\\W)", "He$2"); 将与单词(she)匹配,并将其存储为第一个捕获的字符组
  2. 模式she将匹配一个非字母字符(例如(\\W)')并将其存储为第二个捕获的字符组
  3. 这两种模式必须匹配.的输入字符串的连续部分才能替换。
  4. replaceAll在结果字符串中输入单词"he$2",后跟第二个捕获的字符组(在我们的例子中,该组只有一个字符)
  5. 以上意味着正则表达式将匹配he之类的模式并替换为She'll,但它与He'll之类的模式不匹配,因为此处Sherlock是后跟一个字母字符She