有 Java 编程相关的问题?

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

逐字符比较java中的两个字符串

我是java初学者,我试图通过下面的代码逐个比较java中的两个字符串,并找出它们有多少不同的字符,但这不起作用

     min is the min between the 2 strings

     for(int i=0; i<min-1; i++){
            s1 = w1.substring(j,j++);
            s2 = w2.substring(j,j++);

            if (! s1.equalsIgnoreCase(s2) ){
                counter++;    
            }
      }`

有什么建议吗


共 (5) 个答案

  1. # 1 楼答案

    我在java培训教程中的笔记要求使用charAt()和嵌套循环进行字符串比较。。。该方法可以很容易地更改为从源字符串返回不匹配的字符。。。但我会让你来决定…;-)

    public class SubString {
    
    public static boolean findTarget( String target, String source ) {
    
        int target_len = target.length();
        int source_len = source.length();
    
        boolean found = false;
    
        for(int i = 0; ( i < source_len && !found ); ++i) {
    
        int j = 0;
    
            while( !found ) {
    
                if( j >= target_len ) {
                    break;
                }
    
                /**
                 * Learning Concept:
                 *
                 *  String target = "for";
                 *  String source = "Searching for a string within a string the hard way.";
                 *
                 *  1 - target.charAt( j ) :
                 *    The character at position 0 > The first character in 'Target' > character 'f', index 0.
                 *
                 *  2 - source.charAt( i + j) :
                 *
                 *    The source strings' array index is searched to determine if a match is found for the
                 *    target strings' character index position. The position for each character in the target string
                 *    is then compared to the position of the character in the source string.
                 *
                 *    If the condition is true, the target loop continues for the length of the target string.
                 *
                 *    If all of the source strings' character array element position matches the target strings' character array element position
                 *    Then the condition succeeds ..
                 */
    
                else if( target.charAt( j ) != source.charAt( i + j ) ) {
                    break;
                } else {
                    ++j;
                    if( j == target_len ) {
                        found = true;
                    }
                }
            }
    
        }
    
        return found;
    
    }
    
    public static void main ( String ... args ) {
    
    String target = "for";
    String source = "Searching for a string within a string the hard way.";
    
    System.out.println( findTarget(target, source) );
    
    }
    
    }
    
  2. # 2 楼答案

    使用以下命令:

    char[] first  = w1.toLowerCase().toCharArray();
    char[] second = w2.toLowerCase().toCharArray();
    
    int minLength = Math.min(first.length, second.length);
    
    for(int i = 0; i < minLength; i++)
    {
            if (first[i] != second[i])
            {
                counter++;    
            }
    }
    
  3. # 3 楼答案

    使用charAt(index)方法并对两个字符使用“==”运算符:

    c1 = w1.charAt(j);
    c2 = w2.charAt(j);
    
    if (c1 == c2) ){
       counter++;    
    }
    
  4. # 4 楼答案

    int i =0;
    for(char c : w1.toCharArray())){
       if(i < w2.length() && w2.charAt(i++) != c)
         counter++;
    }
    
  5. # 5 楼答案

    我们可以用substring解决这个问题。但让我们先看看您的代码:

    // assuming, min is the minimum length of both strings,
    // then you don't check the char at the last position
    for(int j=0; j < min-1; j++) {
    
      // s1, s2 will always be empty strings, because j++ is post-increment:
      // it will be incremented *after* it has been evaluated
      s1 = w1.substring(j,j++);
      s2 = w2.substring(j,j++);
    
      if (!s1.equalsIgnoreCase(s2) ){
        counter++;    
      }
    }
    

    基于substring的解决方案可以如下所示:

    for(int j=0; j < min; j++) {
      s1 = w1.substring(j,j+1);
      s2 = w2.substring(j,j+1);
    
      if (!s1.equalsIgnoreCase(s2) ){
        counter++;    
      }
    }