spell checker

import java.util.*;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class Main
{

    // Return a scanner for the given file with the given name.
    private static Scanner openFileWithScanner(String fileName)
    {
        Scanner scanner;
        try
        {
            scanner = new Scanner(new BufferedReader(new FileReader(fileName)));
        }
        catch (FileNotFoundException ex)
        {
            System.err.println("Unable to open " + fileName);
            System.exit(1);
            return null;
        }
        return scanner;
    }

   public static void main(String[] args)
   {
        // Open a scanner for the dictionary
        if(args.length < 1)
        {
            System.err.println("No dictionary file name given.");
        }
        final Scanner dictionaryScanner = openFileWithScanner(args[0]);

        // Get the scanner for the input
        final Scanner inputScanner;
        if(args.length < 2)
        {
            inputScanner = new Scanner(new BufferedInputStream(System.in));
        }
        else
        {
            inputScanner = openFileWithScanner(args[1]);
        }

        /* Add your code here */
       Map<String,Integer> dictionaryMap = new HashMap<>();
       while(dictionaryScanner.hasNextLine()){
           String s = dictionaryScanner.nextLine();
           dictionaryMap.put(s,s.length());
       }

       HashMap<Integer,String> inputMap = new HashMap<Integer, String>();
       LinkedList<String> result = new LinkedList<String>();
       int index = 0;
       while(inputScanner.hasNext()){
           inputMap.put(index,inputScanner.next());
           index++;
       }
       for(int j = 0;j<index;j++){
            String unCheckValue = inputMap.get(j);
            if(!dictionaryMap.containsKey(unCheckValue)){
                //deal the string
                LinkedList<String> resultOfValue = new LinkedList<String>();
                if(dictionaryMap.values().contains(unCheckValue.length() + 1) ){
                    resultOfValue.addAll(insertAnyChar(unCheckValue,dictionaryMap));
                }
                if (dictionaryMap.values().contains(unCheckValue.length()) ) {
                    resultOfValue.addAll(changeAnyChar(unCheckValue,dictionaryMap));
                    resultOfValue.addAll(exchangeAnyChar(unCheckValue,dictionaryMap));
                }
                if(dictionaryMap.values().contains(unCheckValue.length() - 1) ) {
                    resultOfValue.addAll(removeAnyChar(unCheckValue,dictionaryMap));
                }

                if(resultOfValue.size() == 0){
                    result.add(unCheckValue + " : *no alternates found*");
                }else {
                    Collections.sort(resultOfValue);
                    StringBuilder stringBuilder = new StringBuilder(unCheckValue + " : ");
                    for(String ss : resultOfValue){
                        stringBuilder.append(ss + ", ");
                    }
                    result.add(stringBuilder.substring(0,stringBuilder.length()-2));
                }
            }
       }
       result.stream().forEach(e -> System.out.println(e));


   }

    private static LinkedList<String> changeAnyChar(String unCheckVal, Map<String, Integer> dictionaryMap) {
        LinkedList<String> changeResult = new LinkedList<String>();
        StringBuilder stringBuilder = new StringBuilder(unCheckVal);
        for(int index = 0 ;index<stringBuilder.length();index++){
            for(int j = 0 ;j<26;j++) {
                stringBuilder.setCharAt(index, (char) (j + 97));
                String changeValue = stringBuilder.toString();
                if (dictionaryMap.containsKey(changeValue)) {
                    changeResult.add(changeValue);
                }
                stringBuilder = new StringBuilder(unCheckVal);
                stringBuilder.setCharAt(index, (char) (j + 65));
                changeValue = stringBuilder.toString();
                if (dictionaryMap.containsKey(changeValue)) {
                    changeResult.add(changeValue);
                }
                stringBuilder = new StringBuilder(unCheckVal);
            }
        }
        return changeResult;
    }

    private static LinkedList<String> removeAnyChar(String unCheckVal, Map<String, Integer> dictionaryMap) {
        LinkedList<String> removeResult = new LinkedList<String>();
        StringBuilder stringBuilder = new StringBuilder(unCheckVal);
        for(int index = 0 ;index<stringBuilder.length();index++){
            String removeValue = stringBuilder.deleteCharAt(index).toString();
            if(dictionaryMap.containsKey(removeValue)){
                removeResult.add(removeValue);
            }
            stringBuilder = new StringBuilder(unCheckVal);
        }
        return removeResult;
    }

    private static LinkedList<String> exchangeAnyChar(String unCheckVal, Map<String, Integer> dictionaryMap) {
        LinkedList<String> exchangeResult = new LinkedList<String>();
        StringBuilder stringBuilder = new StringBuilder(unCheckVal);
        for(int index = 0 ;index<stringBuilder.length()-1;index++){
            char temp = stringBuilder.charAt(index);
            stringBuilder.setCharAt(index,stringBuilder.charAt(index+1));
            stringBuilder.setCharAt(index+1,temp);
            String exchangeValue = stringBuilder.toString();
            if(dictionaryMap.containsKey(exchangeValue)){
                exchangeResult.add(exchangeValue);
            }
            stringBuilder = new StringBuilder(unCheckVal);
        }
        return exchangeResult;
    }

    /* Add Methods as needed */
   private HashMap<Integer, String> readIntoMap(Scanner inputScanner,int size)
   {
       HashMap<Integer,String> result = new HashMap<Integer, String>();
       for(int index = 0;index<size;index++){
           result.put(index,inputScanner.next());
       }

       return result;
   }

   static LinkedList<String> insertAnyChar(String uncheckVal, Map<String, Integer> dictionaryMap){
       LinkedList<String> insertResult = new LinkedList<String>();
       StringBuilder stringBuilder = new StringBuilder(uncheckVal);
       for(int index = 0 ;index <= stringBuilder.length();index++){
           for(int j = 0 ;j<26;j++) {
               String insertValue = stringBuilder.insert(index, (char) (65 + j)).toString();
               if (dictionaryMap.containsKey(insertValue)) {
                   insertResult.add(insertValue);
               }
               stringBuilder = new StringBuilder(uncheckVal);
               insertValue = stringBuilder.insert(index, (char) (97 + j)).toString();
               if (dictionaryMap.containsKey(insertValue)) {
                   insertResult.add(insertValue);
               }
               stringBuilder = new StringBuilder(uncheckVal);
           }
       }
       return insertResult;

   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Code Spell Checker是一个用于检查代码中拼写错误的插件。当它检测到不是标准的英文单词时,会报错。为了避免这种情况影响代码编写体验,可以对该插件进行配置,让它在遇到特定词汇时不报错。在VSCode中进行配置的步骤如下: 1. 打开设置(Settings)。 2. 打开setting.json文件。 3. 在setting.json文件中添加以下代码:"cSpell.userWords": \["axios", 更多词汇...\]。 另外,还可以通过修改Code Spell Checker的settings.json文件来添加错误的单词。具体操作如下: 1. 打开设置(Settings)。 2. 打开用户(User)。 3. 打开扩展(Extensions)。 4. 找到安装的Code Spell Checker并打开settings.json。 5. 在其中找到图6的内容。 6. 修改其中的内容,添加错误的单词。例如,可以添加bindblur单词。 如果是在工作区添加单词到词典中,可以在VSCode的项目文件夹中的.vscode文件夹下的settings.json文件中进行修改。以上是解决Code Spell Checker报错的一些方案。 #### 引用[.reference_title] - *1* [code spell checker插件规避掉一些特定词汇报错“xxx“: Unknown word.cSpell](https://blog.csdn.net/angrynouse/article/details/125846273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [VSCode中插件Code Spell Checker](https://blog.csdn.net/qq_42078081/article/details/115014474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值