我16岁并且正在努力学习Java,我有一篇文章,我的叔叔给了我一些在Java中可以做的事情。其中之一就是编写并执行一个程序,它将接受扩展消息作为字符串,如
每次看到这幅画,她都很高兴
并将单词替换为he。
每次看到这幅画,他都很高兴。
这部分很简单,但是他希望我能够接受任何形式的她并将其替换为我们喜欢的she
到he
,She
到{{1} },He
至she?
,he?
至she.
,he.
至she'
等等。有人可以帮我制作一个程序来实现这一目标。
我有这个
he'
如果这不是找到这样的答案的合适网站,您可以将我重定向到回答此类问题的网站吗?
答案 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
说明:
String modified = original
.replaceAll("(she)(\\W)", "he$2")
.replaceAll("(She)(\\W)", "He$2");
将与单词(she)
匹配,并将其存储为第一个捕获的字符组she
将匹配一个非字母字符(例如(\\W)
,'
)并将其存储为第二个捕获的字符组.
的输入字符串的连续部分才能替换。replaceAll
在结果字符串中输入单词"he$2"
,后跟第二个捕获的字符组(在我们的例子中,该组只有一个字符)以上意味着正则表达式将匹配he
之类的模式并替换为She'll
,但它与He'll
之类的模式不匹配,因为此处Sherlock
是后跟一个字母字符She