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

Java 搜索字符串是否相差一个字符,java,if-statement,for-loop,Java,If Statement,For Loop,我试图确定输入的单词在文本文件中是否相差一个字符。我有可以工作的代码,但不幸的是,只适用于两个字符或更少的单词,这显然不是很有用,而且代码本身看起来有点凌乱。以下是我目前掌握的情况: if(random.length() == word.length()){ for(int i = 0; i < random.length(); i++){ if( (word.charAt(i) == random.charAt(i))){ str += word+"\n";

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

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

如果我将
inti
改为=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;
}
static boolean equals(字符串word1、字符串word2、int mistakes){
if(word1.equals(word2))//如果word1等于word2,我们总是可以返回true
返回true;
if(word1.length()==word2.length()){//如果word1和word2一样长
对于(inti=0;i
您的代码对我来说似乎很有效,您可能只是错误地解释了它的结果

这可能更加明显:

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++;
    }
} }
int count=0;if(random.length()==word.length()){
for(int i=0;i
如果要检查不同长度的字符串,则需要删除较长字符串中的字符,直到其大小与较短字符串相同为止。 例如: 如果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=“lookingforwordsoneletter与该字符串不同”;
int字=0;
扫描仪扫描=新扫描仪(文件名);
while(scan.hasNext())
{
String word=scan.next();
if(isOneDifferent(word,testAgainst))
{
words++;
}
System.out.println(“一个字母不同的单词数:+单词”);
}
公共布尔值isOneDifferent(字符串字、字符串测试反对)
{
if(word.length()!=testAgainst.length())
{
返回false;
}
int-diff=0;
for(int i=0;i1)
{
返回false;
}
}
如果(差异==1)
{
返回true;
}
其他的
{
返回false;
}

}
那么你到底在问什么?给定一个用户的单词,在本例中为
random
,我试图搜索一个包含大量单词的文本文件,查看此文本文件中的任何单词是否仅相差一个字符
random
。例如;“一天”与“说、雷、大坝、dab”等词相似。你所说的“一个改变了的字符”是什么意思?一次删除、一次插入还是一次编辑?@marc,一个编辑过的字符
Word
的长度必须与
random
的长度相同,因此没有删除或插入,但它可能因任何单数字符值而不同。我喜欢这一行
str+=Word+“\n”。将字符串放入
word
中看起来非常有用,它的长度是单个字符串的长度总和的倍。谢谢,您能解释一下为什么计数等于0吗?我用count来确定有多少单词只与一个字母不同,所以如果
count==0
,并且你打印出你发现的第一个差异,这对我来说真的没有意义。哦,我明白了,我以为你用它来看一个单词中有多少字母不同。我将更改我的代码以表示您想要的内容。我一直在尝试合并您的示例以适合我的示例,但不幸的是,我无法让它工作。什么是
int mistakesAllowed
?它是word1和word2之间允许的不同字符数,因此在您的情况下应该是1。我会编辑一点代码让你理解。好的,谢谢,我就是这么想的。我认为我的问题是,您的示例返回一个布尔值,因为我使用的是文本文件,所以我必须在每个true/false语句之后编写inputFile.close(),因此此方法将我的单词作为false返回,而不是打印。好吧,当它返回true时打印它!类似于
if(等于)(单词,
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++;
    }
} }