【问题标题】:Compare letter in java比较java中的字母
【发布时间】:2018-02-01 14:12:05
【问题描述】:

我想将文件 2 上的每个字母与文件 1 进行比较。 示例:

文件 1:我的名字
文件 2:min@mes

我想在文件 2 上获得差异数为 3:(i、@ 和 s)。 你能帮帮我吗

这是我的代码

public float getCER(String originalteks,String extractteks){
    int end=0;
    int start=0;
    int different_char=0;

    if(originalteks.length()!=extractteks.length()){
        different_char=Math.abs(originalteks.length()-extractteks.length());
    }
    while(start<end){
        if(originalteks.charAt(start)!=originalteks.charAt(start++))
            different_char++;//jumlah diferent chart
    }

    return (float) different_char/originalteks.length();


}

而且它只计算字符数,而不是不同的字符。

【问题讨论】:

  • 文件是否保证字符数相同?如果不是,你想如何处理字符的插入或删除?您是否只对职位差异感兴趣?你想要Levenshtein distance 之类的东西吗?如果是这样,请参阅this question
  • 你不应该初始化end 吗?从这段代码中,end 始终为 0,因此 while(start&lt;end) 不会运行...
  • 如果您在计算字母,为什么该方法返回浮点数?可以数半个字母吗?

标签: java compare


【解决方案1】:

以下实现测试您需要的总差异并且能够处理不同长度的字符串,方法是将较短的字符串与较长的每个子字符串进行比较,直到它们的差异的最大偏移量。从这些差异中选择最小的。当然,如果handleOffset为false,那么我们只限制在字符串的开头,并将差值添加到结果中;

public int getCER(String originalteks,String extractteks, boolean handleOffset){
    String shorter = originalteks;
    String longer = extractteks;
    if (shorter.length() > longer.length()) {
        shorter = extractteks;
        longer = originalteks;
    }
    int[] differences = new int[handleOffset ? (longer.length() - shorter.length + 1) : 1];
    for (int i = 0; i < differences.length; i++) differences[i] = 0;
    for (int i = 0; i < minLength; i++) {
        for (j = 0; j < differences.length; j++) {
            if (shorter.charAt(i) !== longer.charAt(i + j)) {
                differences[j]++;
            }
        }
    }
    int min = shorter.length() + 1;
    for (int i = 0; i < differences.length; i++) {
        if (differences[i] < min) min = differences[i];
    }
    if (!handleOffset) min += longer.length() - shorter.length();
    return min;
}

【讨论】:

    【解决方案2】:

    这应该适合你。我只是在示例中评论我的更改。

    public int getCER(String originalteks,String extractteks){
      int end;
      int different_char=0;
    
      //define the shorter end
      if(originalteks.length < extractteks.length)
        end = originalteks.length();
      else
        end = extractteks.length();
    
      //no if needed -> same length, diff will be 0
      different_char=Math.abs(originalteks.length()-extractteks.length());
    
      for(int start = 0; start < end; start++){
          if(originalteks.charAt(start)!=extractteks.charAt(start))
              different_char++;//jumlah diferent chart
      }
    
      return different_char;
    }
    

    【讨论】:

    • 好的。但它只是比较字符的数量。问题是如何根据文件 1 比较和计算不同的字符。示例:文件 1:“问题”文件 2““kuestiom”。文件 1 比较的不同字母的数量为 2,在“k,m”
    • 好的,我解决了这个问题。现在你得到了不同字符的数量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2012-03-11
    • 2011-06-29
    相关资源
    最近更新 更多