我正在写一本字典型应用程序。我有一个哈希映射的术语和定义列表。基本前提是您可以点击一个单词列表来查看定义。
我已启动并运行此功能 - 我现在正尝试在定义之间添加动态链接。
示例:假设用户点击列表中的项目“dog”。可能会出现这样的定义:“小毛茸茸的[动物],通常作为宠物饲养。另见[猫]。”目的是用户可以单击[animal]或[cat]一词并转到相应的定义。我已经解决了确保定义中的任何链接都用方括号限制的麻烦,所以这只是扫描弹出字符串中的文本[括号括起来]并提供指向该定义的链接。 / p>
请注意,定义可以包含多个链接,而有些链接不包含任何链接。
我可以在显示之前访问该字符串,所以我想最好的方法是在显示对话框之前进行扫描并准备链接。
问题是,我将如何扫描方括号所包围的文本,并返回这些括号中的文字?
理想情况下,显示的实际对话框将没有方括号,我还需要找出一种将超链接放入对话框文本的方法,但是当我来到它时,我会穿过那座桥。
我是Java的新手 - 我来自MATLAB,我只是维持下去,但这是一项不太常见的任务,而不是我到目前为止所处理的任务!
答案 0 :(得分:0)
很简单,我认为......由于文本在括号中,您需要扫描每个字母。所以基本的配方是:
while
循环中扫描每个角色(比方说,while i < len(text)
)[
:
i++;
i
的字母添加到某个临时变量while (character @ i) != ']'
将其附加到临时变量一些提示:
StringBuilder
附加文字(因为常规string
是不可变的)string.substring()
on每一对都在里面得到文字。这样你首先迭代定义来找到括号(可能捕获不匹配的,用于早期错误处理),然后迭代成对的索引...... 至于链接,也许这将是有用的:How can I get clickable hyperlinks in AlertDialog from a string resource?
答案 1 :(得分:0)
你可以用正则表达式做到这一点;像这样的东西:
([^[]*)(\[[^]]+\])
描述了两个“匹配组”;第一个字符串表示任何不是“[”的零个或多个字符的字符串,第二个字符串表示以“[”开头的任何字符串,包含一个或多个不是“]”的字符,并以“ ]”。
然后,您可以浏览输入以查找此模式的匹配项。第一个匹配组未更改,第二个匹配组将转换为链接。当模式停止匹配您的输入时,将剩下的任何内容都移除并传输不变的。
你必须做一点实验;正则表达式通常需要一些调试。如果您的链接文本只能包含字母数字和空格,那么您的模式将更像这样:
([^[]*)(\[[\s\w]+\])
另外,您可能会发现Android下的正则表达式匹配太慢而不实用,在这种情况下您将不得不使用wasyl的建议。