-2

我有一个原始字符串:

字符串 originalStr = "Đây là chuỗi gốc";

我还有另一个字符串:

字符串 str1 = "Đây";

字符串 str2 = "天";

我想检查字符串 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

4

3 回答 3

1

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

   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 的方法来实现所需的结果。

于 2013-06-01T16:14:18.253 回答
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,希望这会起作用。

于 2013-06-01T16:43:50.890 回答
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
于 2013-06-02T15:13:41.333 回答