如何检测Java字符串中的unicode字符?

如何检测Java字符串中的unicode字符?,java,string,unicode,Java,String,Unicode,假设我有一个包含Ü的字符串。如何找到所有这些unicode字符?我应该测试他们的代码吗?我该怎么做 例如,给定字符串“AÜXÜ”,我想将其转换为“AYXY”。我想对其他unicode字符也这样做,我不想将它们存储在某种类型的翻译映射中。您可以反过来询问字符是否为ascii字符 public static boolean isAscii(char ch) { return ch < 128; } public静态布尔值isAscii(char-ch){ 返回ch

假设我有一个包含Ü的字符串。如何找到所有这些unicode字符?我应该测试他们的代码吗?我该怎么做


例如,给定字符串“AÜXÜ”,我想将其转换为“AYXY”。我想对其他unicode字符也这样做,我不想将它们存储在某种类型的翻译映射中。

您可以反过来询问字符是否为ascii字符

public static boolean isAscii(char ch) {
    return ch < 128;
}
public静态布尔值isAscii(char-ch){
返回ch<128;
}
当然,你必须逐字符分析字符串


(该方法包含大量有用的字符方法)

从您的示例中,我不确定您想做什么-如果您只是想用Y替换所有非ASCII值,那么您可以在字符串中循环查找0到127范围之外的代码点,并将这些代码点替换为Y。

unicode字符的定义很模糊,但将被视为该标准未涵盖的UTF-8字符。如果在您的情况下是这样,则循环遍历字符串中的所有字符并测试其代码点,以确定它是否在给定的字符集中

或者,使用
映射
和映射中包含匹配键的字符。例如:

Map<Character, Character> charReplacementMap = new HashMap<Character, Character>() {{
    put('Ü', 'Y');
    // Put more here.
}};

String originalString = "AÜAÜ";
StringBuilder builder = new StringBuilder();

for (char currentChar : originalString.toCharArray()) {
    Character replacementChar = charReplacementMap.get(currentChar);
    builder.append(replacementChar != null ? replacementChar : currentChar);
}

String newString = builder.toString();

一个陷阱,Ü会变成U,而不是Y。不确定这是否是你想要的。如果要替换为发音字符,则确实需要创建映射。当然,这是一项乏味的工作,但它比您学习本主题所需的时间要短。

您可以循环使用字符串和每个字符调用

If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
 // replace with Y
}

我不清楚将“AÜXÜ”转换为“AYXY”究竟能得到什么。这是因为Ü在特定语言中的发音类似于Y吗?什么语言?还有什么其他规则可以适用


就术语而言

"a"
上面是一个Unicode字符串。它包含单个UTF-16编码字符

public static boolean isAscii(char ch) {
    return ch < 128;
}

如果您希望将字符范围限制为英语字母表,请查看。

字符
还提供了一些有趣的方法。看一看

Character.UnicodeBlock.of('a') == Character.UnicodeBlock.BASIC_LATIN; //true

Character.UnicodeBlock.of('�') == Character.UnicodeBlock.BASIC_LATIN; //false

如果没有自己的地图,你怎么知道Ü将映射到什么?没有简单的映射,我怀疑在不同的语言中,任何映射都可能不同,您可以通过逐个查看字符来实现。这取决于字符的“范围”,但它的级别很低,我假设已经存在一些东西来完成这项任务。请看这里的解决方案:我通常是这样做的。但这需要你在地图中添加每个字符。我看不到任何其他有效的方法来用某个字符替换某个字符,以及替换多个字符。如果你不将每个字符添加到地图中,你如何定义替换?还是希望所有非ascii字符都替换为单个ascii字符?@BalusC-实际上,Unicode字符(代码点)的真正定义非常精确。问题是OP不理解ASCII字符是Unicode代码点的适当子集。或者您只是想删除变音符号?我已经用它编辑了我的文章。测试代码点很好,但我没有印象他想用Y替换每个字符。他说unicode字符,我理解他可能意味着用Y替换所有非ascii字符。whateverIt只是一个替换示例。实际上,我将用
\u XX\u
替换字符:)