当前位置: 首页 > 知识库问答 >
问题:

.equalsIgnoreCase字符串未正确比较

商兴朝
2023-03-14

此项目是一个可编辑的字典程序。我正在尝试循环浏览已添加到词典中的单词,并将用户通过扫描仪输入的单词与已添加的单词进行比较。我的问题是,无论输入多么准确,我创建的异常总是被调用。我不确定异常是否错误,或者字符串是否比较不正确。字典中的单词是从一个名为“dictionary.txt”的文件中读取的。如果有帮助,程序将使用输入/输出。这是代码。。。。请帮忙!!

import java.util.ArrayList;


public class Dictionary {
    ArrayList <Word> Words;

    public Dictionary(){
        Words = new ArrayList <Word>();
    }
    public void addWord(String name, String definition){
        Word word = new Word(name, definition);
        Words.add(word);
    }
    public String findWord(String name){
        String word = "";

        for (int i = 0; i < Words.size(); i++){

            if (name.equalsIgnoreCase(Words.get(i).getName())){
                Words.get(i);
            }
            word += Words.get(i).getName();
        }
            return word;
    }
    public String findDefinition(String name){
        String def = "";

        for (int i = 0; i < Words.size(); i++){

            if (name.equalsIgnoreCase(Words.get(i).getName())){
                Words.get(i);
            }
            def += Words.get(i).getDefinition();

            }
        return def;
        }

    public String toString(){
        String temp = "";
        for (int i = 0; i < Words.size(); i++ ){
            temp += Words.get(i).getName() + " - " + Words.get(i).getDefinition() + "\n";

        }
        return temp;
    }


    public class Word {

        String name;
        String definition;

        public Word(String name, String definition){
            this.name = name;
            this.definition = definition;

        }
        public String getName(){
            return name;
        }
        public String getDefinition(){
            return definition;
        }

    }//End Word
}//End dictionary





import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;



public class Read {

    private static Scanner in;

    public static void main(String[] args) throws FileNotFoundException {   

        File Read = new File ("Dictionary.txt");
        in = new Scanner (Read);

        //ArrayList called save
        Dictionary save = new Dictionary();

        while (in.hasNext()){
            String w1 = in.next();

            String w2 = in.nextLine();

            save.addWord(w1, w2);

        }
            System.out.println(save);

    String newLine = System.getProperty("line.separator");
    System.out.println("Press 1 for Menu");
    Scanner en = new Scanner(System.in);
        int choice = en.nextInt();

    while (choice == (1)){
        System.out.println("What would you like to do?"
                + newLine + "1 - List all Words and Definitions"
                + newLine + "2 - List definition for word"
                + newLine + "3 - Change definition"
                + newLine + "4 - Add new word"
                + newLine + "5 - Exit");

        int input = en.nextInt();
        switch(input){
            case 1: System.out.println(save);
            break;

            case 2: System.out.println("Which word definition would you like to see?");

            try{
                    String type = en.next();
                if (type.equalsIgnoreCase(save.findWord(type))){
                    System.out.println("The word you chose is: " + save.findWord(type));


                }
                else{ 
                    throw new InvalidNameException();
                }
            }
                catch (InvalidNameException n){

                }
                finally {System.out.println("Sorry, that word cannot be found.");
            }
                break;

            case 3: System.out.println("Which word definition would you like to change?");

            try{
                String def = en.next();
                if (def.equalsIgnoreCase(save.findWord(def))){
                System.out.println("What will be the new definition for: " + save.findWord(def));

                String define = en.next();
                save.addWord(def, define);
                }

                else{ 
                throw new InvalidNameException();
                }
            }
                catch (InvalidNameException n){

                }
            finally {System.out.println("Sorry, that word cannot be found.");
            }


                break;

            case 4: System.out.println("Enter your new word");

                String wrd = en.next();

                System.out.println("What is the definition of this word?");

                String define = en.next();

                    save.addWord(wrd, define);

                    break;

                case 5: PrintStream fin = new PrintStream(new File("Dictionary.txt"));

                fin.println(save);

                    break;
            }

    }
    }
    }//End Read



    public class InvalidNameException extends Exception{

        public InvalidNameException() {
            System.out.println("Not a valid word");
        }

    }//End exception

I changed te findWord metod to this:

                                                                                 public Word findWord(String name){

        Word word = new Word("","");

        for (int i = 0; i < Words.size(); i++){ 

            if (name.equalsIgnoreCase(Words.get(i).getName())){

                word = Words.get(i);
            }
        }
        return word;
    }

but now there is an issue with the object types in my Read class in this area:

try{
                String def = en.next();
                if (def.equalsIgnoreCase(save.findWord(def))){
                System.out.println("What will be the new definition for: " +  save.findWord(def));

                String define = en.next();
                save.addWord(def, define);
                }

共有2个答案

孟杰
2023-03-14

你的findWord/findDef是错误的,

public String findWord(String name){
    String word = "";

    for (int i = 0; i < Words.size(); i++){

        if (name.equalsIgnoreCase(Words.get(i).getName())){
            Words.get(i);
        }
        word += Words.get(i).getName();
    }
        return word;
}

if块实际上没有做任何有用的事情,请尝试将下面的行移动到if块中(对两种方法都这样做)

糜帅
2023-03-14

Scanner#Next()只是返回下一个令牌。你想要的是Scanner#nextLine()

 类似资料:
  • 我有一个java程序,它可以构建一个最大堆,调用Heapify并对任何列表进行排序。目前,它将对字母表进行排序,不会出现任何问题,甚至还会列出一系列字符串,如apple、addle、azzle,也不会出现任何问题。下面是程序输入的屏幕截图,其中显示了第一行要排序的项目数及其下面的列表: 绿色是我知道已经正确排序的输入。如果检查unicode表,可以看到绿色列表的排序正确。但是,我的程序输出不正确(

  • 问题内容: 我在AngularJS上建立的SPA中有一个文本输入框,供用户向打印输出中添加标题。输入框的声明如下: 文本框中填充了服务器提供的默认标题。用户可以将标题更改为适合他们的名称。更改标题后,服务器将更新并在响应的标题中发送回新标题,然后替换框中的标题。这非常适合标准ASCII类型的字符。 但是,对于unicode字符(例如àßéçøö),它不起作用。文本已正确发送,在服务器上正确更新并正

  • 我有以下字符串 decrypted_my_content_456974543290983824.csv 并且我想要一个简单的正则表达式来获取decrypted和last_之间的字符串,这意味着我想要返回my_content。 我的正则表达式如下 在不同的在线工具(如regex101)中进行了测试,结果我得到了我想要的东西。但是,在代码中 它不起作用的原因--我想我错过了一些转义字符还是?此外,如果

  • 问题内容: 我正在寻找一个正则表达式来匹配Java源代码中的字符串文字。 可能吗? 我的意图是用其他东西替换另一个字符串中的所有字符串。使用: 这样的事情。 问题答案: 好。那么,您想要在字符串中搜索以双引号开头和结尾的一系列字符吗? 注意非贪婪模式。

  • 我试图上传csv到我的mysql数据库使用jooq,但我得到以下错误。我在网上尝试了各种建议的解决方案,但都没能解决 我如何将csv上传到jooq 我确保文件在utf-8中,但是当有UTF-8字符记录时,无法保存在DB中并抛出上述错误。我确保使用 前端ajax: 我正在通过java rest从前端读取文件 并在传递给jooq之前在本地系统中递归写入文件 我将DB设置为接受utf-8,并进行了验证