public class SynonymHandler {
public static void main(String[] args) {
String[] synonymData = { "merciful", "gracious", "kindly", "forgiving" };
System.out.println("# original");
for (String element : synonymData) {
System.out.println(element);
}
String[] modified = removeSynonym(synonymData, "merciful", "gracious");
System.out.println("# modified");
for (String element : modified) {
System.out.println(element);
}
}
private static String[] removeSynonym(String[] synonymData, String word, String synonym) {
// result will have the same length as source:
String[] result = new String[synonymData.length];
// loop through the synonymData
for (int index = 0; index < synonymData.length; index++) {
// if word = synonymData[index] use synomyn, else use the original value
result[index] = word.equals(synonymData[index]) ? synonym : synonymData[index];
}
return result;
}
}
public static void removeSynonym(String[] synonymData, String word, String synonym) {
int index = synonymLineIndex(synonymData, word);
String[] removedSynData = new String[synonymData.length];
for (int i = 0, int m = 0; i < synonymData.length; i++)
if (synonymData[index].contains(word))
removedSynData[m++] = synonymData[i];
}
2条答案
按热度按时间ecr0jaav1#
这个问题的代码可以进行大量优化,但是假设我们想要一个更容易理解的答案,这里有一些java代码来用它的同义词替换一个单词,没有输入被验证,所以如果使用null值将失败:
字符串
muk1a3rh2#
这是一种非常奇怪的存储数据的方式。这是你的设计还是你处理的?将字符串(单词)的HashMap存储到字符串(同义词)的数组中会更有意义。但是让我们使用你现有的方法。
看起来你的同义词数据是作为一个简单的字符串数组传入的--就像你打印它们时出现的一样--而不是解析成更好的格式。所以
synonymData[0]
是merciful
的数据,synonynData[1]
是powerful
的数据。之后,它是自由格式的文本。让我们看看你的代码:
字符串
你的代码永远不会修改syntax Data。它会创建一个新的removedSynData数组,构建它,然后继续将它转储到地板上,不做任何事情。此外,它与原始结构的风格不同。
有两种基本的方法可以采用。首先,当你这样做时,你会得到正确的索引:
型
方法一:解析行,删除,重建行
方法一是解析这一行--生成一个同义词的字符串数组,然后删除要删除的同义词,然后重新构建一个新的字符串。
做你能做的事:
型
在此之后,
bigParts[0]
包含单词(可能带有白色空格),bigParts[1]
包含所有同义词作为单个字符串(可能带有白色空格)。注意,split()
接受正则表达式,这就是我包含\\
的原因。因此它传递单个\
进行拆分,以转义管道字符,否则管道字符将代表OR。你需要检查数组的长度是否至少为2,然后这样做:
型
你可以遍历数组,去掉白色空间,然后找到你想删除的那个。把它从数组中删除。然后重新组合一个字符串(代码需要你来弄清楚),然后这样做:
型
方法二:ReplaceAll()
另一种方法是只使用正则表达式和
String.replaceAll()
。它需要一个复杂的RE来确保你只匹配整个单词。例如,如果你应该删除rent
,你不会想匹配parent
。这需要时间来弄清楚,但是当你完成时,它是一行代码。型