检查字符串字符是否与其匹配将替换

时间:2016-02-26 21:30:53

标签: java regex char

即使格式不匹配,我想搜索字符串例如 “Apple”是我试图搜索的字符串,但我输入“apple”或“pppple”或“Applé”。我想检查我输入的每个字符, 如果它与我想要搜索的字符串不匹配,它将替换它,直到我得到字符串“Apple”。

2 个答案:

答案 0 :(得分:2)

您可能对以下代码感兴趣,该代码使用java.text.Normalizer在较大的规范化字符串中查找规范化字符串:

  

此类提供方法normalize,它将Unicode文本转换为等效的组合或分解形式,从而可以更轻松地对文本进行排序和搜索。 normalize方法支持Unicode Standard Annex #15 — Unicode Normalization Forms中描述的标准规范化表单。

Sample code

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.text.Normalizer;

class Ideone
{
    public static void main(String[] args) {
        String haystack[] = {"Apple","Apple","Apple"}; // sample input strings
        String needle[] = {"ápple", "apple", "Applé"}; // sample keywords
        for (int i = 0; i < haystack.length; i++) {    // loop through inputs
            System.out.println(
                find(
                      normalize(haystack[i]),         // get the normalized form of input
                      normalize(needle[i])            // get the normalized form of the keyword
                )
            );
        }
    }

    public static String normalize(String s) {       // Get the string without diacritics
        return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");
    }

    // Checks if a string contains another in a case-insensitive way
    public static boolean find(String haystack, String needle) {  
        Pattern p = Pattern.compile(needle,  Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(haystack);
        if (m.find()) {
            return true;
        } else {
            return false;
        }

    }
}

答案 1 :(得分:1)

你的问题并不完全清楚,但听起来你可能正试图计算两个弦之间的Levenshtein距离。如果你对这个术语进行一些研究,应该清楚这是否是你需要的。

简而言之:

  

Levenshtein距离是将“pppple”转换为“Apple”所需的删除,插入或替换的数量。