有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java搜索字符串是否相差一个字符

我试图确定输入的单词在文本文件中是否相差一个字符。我有可以工作的代码,但不幸的是,只适用于两个字符或更少的单词,这显然不是很有用,而且代码本身看起来有点凌乱。以下是我目前掌握的情况:

if(random.length() == word.length()){
  for(int i = 0; i < random.length(); i++){
    if( (word.charAt(i) == random.charAt(i))){
      str += word+"\n"; 
      count++;
    }
  }
 }  

其中random是用户输入的单词,word是要在文本文件中搜索的单词

如果我将第二个if语句更改为

if( (word.charAt(i) == random.charAt(i)) && (word.charAt(i -1) == random.charAt(i-1)))

如果我将int i改为=1,我似乎可以获得更多我想要实现的功能,但是我的代码只在前两个字母相同时搜索,而不在后两个字母相同时搜索,这是它应该做的


共 (2) 个答案

  1. # 1 楼答案

    我想你需要这样的函数?我只是编写并测试了它

    static boolean equals(String word1, String word2, int mistakesAllowed) {
        if(word1.equals(word2)) // if word1 equals word2, we can always return true
            return true;
    
        if(word1.length() == word2.length()) { // if word1 is as long as word 2
            for(int i = 0; i < word1.length(); i++) { // go from first to last character index the words
                if(word1.charAt(i) != word2.charAt(i)) { // if this character from word 1 does not equal the character from word 2
                    mistakesAllowed ; // reduce one mistake allowed
                    if(mistakesAllowed < 0) { // and if you have more mistakes than allowed
                        return false; // return false
                    }
                }
            }
        }
    
        return true;
    }
    
  2. # 2 楼答案

    你的代码对我来说似乎很有效,你可能只是错误地解释了它的结果

    这可能更明显:

    int count = 0;     if(random.length() == word.length()) {
    for(int i = 0; i < random.length(); i++)
    {
        if( (word.charAt(i) != random.charAt(i) ))
        {
            if(count == 0)
            {
                System.out.println("Found first difference!");
            }
            if(count != 0)
            {
                System.out.println("Strings are more than one letter different!");
            }
            count++;
        }
    } }
    

    如果要检查不同长度的字符串,需要从长字符串中删除字符,直到其大小与短字符串相同。 例如: 如果String1=“abc”; 和String2=“zzzabcdef”

    您需要从第二个字符串中删除6个字符,并测试每删除6个字符的组合。所以你需要测试字符串:def,cde,abc,zab,zza,zzz,zzb,zzc,zzd,zze,zzf,zaf,zae,zad,zac,zab,zza,zzf,zze。。。,此外,该列表的大小为9选择6,因此它肯定不是最佳或推荐的

    但是,您可以检查一个比另一个长一个字符的字符串是否只是另一个添加了一个字母的字符串。要做到这一点,您需要一个for循环来获取从0到i,以及从i+1到末尾的两个子字符串。这将省略第i个字符,循环字符串的大小-1,将首先给出完整的字符串,然后是没有第一个字母的字符串,然后是缺少第二个字母的字符串,依此类推。然后以我们上面所做的相同方式测试该子字符串

    如果这不是你想要的,请发表评论

    编辑

    要查看一个文件中有多少单词是一个字母不同于一个可变单词,您需要在文件中循环,获取每个单词。然后测试这是否是字符串就差一个字母了。应该是这样的:

    String testAgainst = "lookingForWordsOneLetterDifferentThanThisString";
    int words = 0;
    
    Scanner scan = new Scanner(fileName);
    
    while(scan.hasNext())
    {
        String word = scan.next();
    	
        if( isOneDifferent(word, testAgainst) )
        {
            words++;
        }
    
        System.out.println("Number of words one letter different: " + words);
    }
    
    public boolean isOneDifferent(String word, String testAgainst)
    {
        if(word.length() != testAgainst.length())
        {
            return false;
        }
    
        int diffs = 0;
    
        for(int i = 0; i < word.length(); i++)
        {
            if(word.charAt(i) != testAgainst.charAt(i))
            {
                diffs++;
            }
    		
            if(diffs > 1)
            {
                return false;
            }
        }
    
        if(diffs == 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    
    }