我有一个过度使用的单词的散列表作为键,它们的替换作为值。这是来自Map的一些值。
[惊人的:惊人的有趣的:字面上耐人寻味的:坦率地说好的:愉快的困难:费力的变化:转变......]
我必须实现一个类,它可以在给定的文本文件中搜索过度使用的单词,并用更好的选择替换它们。旧文本文件:
““太棒了”是我能想到的最好的形容词。从字面上看,很难表达我有多喜欢它。它太棒了!!!!好,不错。我不会改变它的一点。请你友好一点,帮我修改一下我的写作!!b BB BB BB BB B。”
新文本文件:
““令人震惊”是我能想到的最好的形容方式。坦白说,表达我有多喜欢它是一件费力的事。它令人惊讶地令人愉快!!!!上级,而不是低劣。我不会改变它的一点。请你愉快,帮助我修改我的写作!!猫BB BB BB BB猫“
- TextImprover必须保留输入文件的标点符号。
- 假设输入文件中的所有单词都是小写、前导大写或全大写。
我已经实现了第一个函数,它读取一个txt文件并绘制一个过度使用的单词的Map:
public class TextImprover {
private HashMap<String, String> wordMap ;
/**
* Constructor
*
* @param wordMapFileName name of the file containing the over-used words and their replacements
*/
public TextImprover(String wordMapFileName) {
this.wordMap = new HashMap<String,String>();
try {
BufferedReader br = new BufferedReader(new FileReader(wordMapFileName));
String line ;
while((line = br.readLine())!= null) {
String[] wordLine = line.split("\t");
//System.out.println(wordLine[1]);
String overUsedWord = wordLine[0].trim();
String replaceWord = wordLine[1].trim();
wordMap.put(overUsedWord, replaceWord);
}
br.close();
}catch(FileNotFoundException e){
System.out.println("File: "+ wordMapFileName + " not found");
}catch (IOException e1) {
System.out.println(e1.getMessage());
}
}
我需要此函数:
/**
* Replaces all of the over-used words in the given file with better words, based on the word map
* used to create this TextImprover
*
* @param fileName name of the file containing the text to be improved
*/
public void improveText(String fileName) {
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line ;
while((line = br.readLine())!= null) {
String[] lineWords = line.split(" ");
// The code I'm strugling with
}
br.close();
}catch(FileNotFoundException e){
System.out.println("File: "+ fileName + " not found");
}catch (IOException e1) {
System.out.println(e1.getMessage());
}
}
谢谢你的帮助。
1条答案
按热度按时间mkshixfv1#
split
方法也使用正则表达式进行拆分,而我将以“通常”的方式使用正则表达式([a-zA-Z]+
)来查找输入中的下一个单词(“通常”的方式是使用Pattern
和Matcher
)。然后使用
Matcher.replaceAll(Function<MatchResult,String> replacer)
方法,将每个匹配项放入函数中,然后从Map中获取替换项,并决定是否要将其转换为全部大写或标题大写(仅第一个字符大写)。您发布的代码的等效代码(因此没有实际的内部替换内容,但在那里更容易)将如下所示: