1

我不知道我应该如何返回第一个位置 org 和检查是不同的。我必须使用子字符串吗?

import acm.program.*;

public class CheckPasswords extends ConsoleProgram
{
  public void run()
  {  

   while(true)
   {
      String org = readLine("Enter Password: ");
      String check = readLine("Confirm Password: ");

      if(org.equals(check))
      {
        println("Password Confirmed");
      }
      else
      {
        println("Passwords do not Match");
        //???
      }
   }
  }
}
4

4 回答 4

3

这是最简单最清晰的方法

private int getPositionWhereTextDiffer(String a, String b) {
    int position = 0;
    while ( b.length() > position &&
            a.length() > position &&
            a.charAt(position) == b.charAt(position)) {
        position++;
    }
    return position;
}
于 2019-09-27T03:07:29.367 回答
0

我的解决方案是:

static public int indexOfDiff(String one, String two) {
    if(one!=null && two!=null) { 
        if(one==null || two==null) { 
            return 0;            
            }
        else {
            int ln=(one.length()<two.length() ? one.length() : two.length());
            for(int xa=0; xa<ln; xa++) {
                if(one.charAt(xa)!=two.charAt(xa)) { return xa; }
                }
            if(one.length()!=two.length()) {
                return ln;
                }
            }
        }
    return -1;
    }

-1如果字符串实际上相等(包括如果两者都相等),则返回null,这在实际使用中通常不应该是这种情况,因为已经知道字符串是不同的。

于 2014-02-10T17:49:19.727 回答
-1

如果您只想检查它们是否相等,可以使用:

int val = org.compareTo(check);

如果它们相等,它将返回 0,如果 org 在 check 之前返回负值,如果 org在check之后返回正值。

如果您真的想返回它们不相等的第一个位置,请使用此函数:

int firstMismatch(String org, String check)
{
    int limit = (org.length()>check.length())?org.length():check.length();
    for(int i=0;i<limit;i++)
    {
        try{
        if(org.charAt(i)!=check.charAt(i))
        {
             return i; //If one of the strings end, that's the position they are different, otherwise there is a mismatch. Either way, just return the index of mismatch
        }
        }
        catch(Exception e)
        {
             if(org.length()!=check.length())
            {

             return(i); //Execution comes here only when length of strings is unequal
         //Exception occurs because first string is smaller than
         // the second or vice versa. Say if you use "fred" and"fredd" as org and check 
         //respectively, "fred" is smaller than "fredd" so accessing org[4] is not allowed.   
         //Hence the exception.
          }

           System.out.println("Problem encountered"); //Some other exception has occured.
          return(-2);
        }  
    }
    return(-1); //if they are equal, just return -1



}

编辑:在您的代码中,调用如下:

public class CheckPasswords extends ConsoleProgram
{
  public void run()
  {  

  while(true)
  {
  String org = readLine("Enter Password: ");
  String check = readLine("Confirm Password: ");
  int mismatchPosition = firstMisMatch(org,check);  
  if(mismatchPosition==-1)
  {
    println("Password Confirmed");
  }
  else
  {
    println("Passwords do not match from position "+mismatchPosition);

      }
   }
  }
}
于 2014-02-10T04:43:06.327 回答
-1
boolean isDifferent = false;
if(org!=null && check!=null) {
if(org.length()!=check.length()) {
    System.out.println("String are diff at position, "+check.length()+1);
} else {
    int mismatchPos = 0;
    for(int i=0; i< org.length();i++) {
        if(org.charAt(i)!=check.charAt(i)) {
            isDifferent = true;
            mismatchPos = i;
            break;
        }
    }
    if(isDifferent) {
        System.out.println("String are diff at position, "+mismatchPos);
    }
 }
}
于 2014-02-10T04:49:08.320 回答