我正在学习Java,但我只是想弄清楚如何解决这个问题。我有一个字符串,例如:
The <object> <verb>, on the <object>.
<>
中包含的每个字符串(<>
仅用于说明,而不包含在原始字符串中)是哈希映射的键,这些键将返回随机值。
然后,我将字符串分成一个字符串数组,然后遍历该数组并搜索哈希图(如果该键存在)返回一个值,在上面的示例中,这是我遇到问题的地方 <verb>
是密钥,但不是<verb>,
(带逗号)
如何摆脱逗号,然后返回一个值。
因此最终结果我不需要完整的代码,仅是有关如何解决此特定问题的想法。
狗坐在猫上。
答案 0 :(得分:0)
您可以使用正则表达式提取所有单词(仅由字母组成),然后根据需要搜索地图。我知道您只要求输入逗号,但是我认为这是用例。
List<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("[a-zA-Z]+") //regex for letter-strings only
.matcher(yourString); // e.g. "The dog sat, on the cat."
while (m.find()) {
allMatches.add(m.group());
}
结果将是以下列表:
{"The", "dog", "sat", "on", "the", "cat"}
然后,您可以迭代allMatches
从数据结构中找到合适的结果。
P.S。当您使用正则表达式时,请尝试仅编译一次模式,并在需要时再次使用它,因为这样操作并不便宜。
答案 1 :(得分:0)
Java中String
类的split
方法采用regular expressions,而Java中的正则表达式具有or
运算符,类似于if
。
因此,除了拆分像空格一样的单个字符,您还可以拆分诸如逗号,空格,空格和句点之类的几种不同内容。
String sentence = "The dog sat, on the cat.";
String [] words = sentence.split(", | |\\.");
管道字符|
是regex的or
运算符。
请注意,我添加了\\.
,它将删除'。'。来自“猫”。
在正则表达式中,点表示“任何字母”,因此要与实际的点(句号,句子结尾)匹配,您需要使用\
对其进行转义。
并且在Java字符串文字中(“”之间的任何内容)\\
表示将实际的\
放入字符串中,这样\\.
会在\.
收到时变成split
作为参数。
还有一种更通用的方法:
String [] words = sentence.split("\\W+");
\W
的意思是“任何非单词字符”-除字母,数字或下划线以外的任何字符,而+
的意思是“连续出现一次或多次”。
因此,这会将字符串拆分成不是单词的任何内容。
请记住,在Java中,String
类是不可变的-创建后便无法更改其内容。
因此,无论您使用哪种解决方案-Spara建议的replaceAll
,使用nemanja228建议的Matcher
进行单词搜索,还是我的答案中的split
,都将始终有创建了原始字符串,并且原始字符串不会更改,因此您只需要保留对其的引用即可将其保留以备将来使用(不要更改保存它的变量)。