检查UTF-8字符串的内容

时间:2013-06-01 16:06:44

标签: java utf-8

我有一个原始字符串:

String originalStr =“Đâylàchuỗigốc”;

我也有另一个字符串:

String str1 =“Đây”;

String str2 =“Day”;

我想检查字符串str1和str2是否包含在originalStr中。 有什么想法吗?

感谢所有评论;

我修好了。请关注代码:

public String convertUTF8String(String _originalString){
    String resultString = StringUtils.stripAccents(_originalString);
    return resultString.replace('Đ', 'D').replace('đ', 'd');
}

注意:导入org.apache.commons.lang3.StringUtils;

您可以下载Commons Lang here

3 个答案:

答案 0 :(得分:0)

如果您使用UTF-8编码编写和保存.java文件,那么您可以使用简单的字符串contains方法,这是我运行的示例:

   public static void main (String args[]) {
    String originalStr = "Đây là chuỗi gốc"; 
    String str1 = "Đây";
    String str2 = "Day";
    System.out.println(originalStr.contains(str1));
    System.out.println(originalStr.contains(str2));
}

这是输出,这是正确的:

  

     

在评论后编辑

它们都是两个不同的字符串,因此结果是真的&假。 Java没有翻译字符串和比较的智能。 “Đây”& “Day”是两个不同的字符串,尽管它们具有相同的含义。如果你想要实现它们都是相同的那么你应该编写一个方法来翻译字符串然后进行比较。在这种情况下,两个字符串的含义将是相同的,因此结果将是真实的。或者你可以使用自己的方法translateAndCompare来实现所需的结果。

答案 1 :(得分:0)

最安全的方法可能是从字符串中删除所有重音并以这种方式进行比较。例如:

Pattern ACCENTS_PATTERN = Pattern.compile( "[\\p{InCombiningDiacriticalMarks}]+" );
String originalStr = "Đây là chuỗi gốc";
String str1 = "Đây";
String str2 = "Day";

System.out.println( "Is str1 in originalStr? : " + originalStr.contains( str1 ) );
System.out.println( "Is str2 in originalStr? : " + originalStr.contains( str2 ) );

String originalNorm = ACCENTS_PATTERN.matcher( 
    Normalizer.normalize( originalStr, Normalizer.Form.NFD ) )
        .replaceAll( "" );

System.out.println( "The normalized string is " + originalNorm );

不幸的是,由于输出如下所示,这并不能完全解决问题:

Is str1 in originalStr? : true
Is str2 in originalStr? : false
The normalized string is Đay la chuoi goc

正如你所看到的那样,第一个D还有一个短划线。但是,如果你能弄清楚这个字母属于哪个Unicode组,那么你可以将它添加到ACCENTS_PATTERN并希望那个'工作。

答案 2 :(得分:0)

要测试字符串是否包含在没有变音符号的另一个字符串中,您可以使用Apache common lang:http://commons.apache.org/proper/commons-lang//apidocs/org/apache/commons/lang3/StringUtils.html#stripAccents%28java.lang.String%29

public boolean isStringContained(String src, String sub) {
  sub = StringUtils.stripAccents(sub);
  src = StringUtils.stripAccents(src)
  return src.contains(sub);
}

然后你可以使用这个功能:

isStringContained("Đây là chuỗi gốc", "Đây"); // returns true
isStringContained("Đây là chuỗi gốc", "Day"); // returns true