我尝试在Java中为强调的元音键入char文字,但是编译器会说: unclosed character literal
这就是我要做的事情:
char [] a = {'à', 'á', 'â', 'ä' };
我尝试过使用Unicode '\u00E0'
但由于某些原因它们与我的代码不匹配:
for( char c : string.toCharArray() ) {
if( c == a[i] ) {
// I've found a funny letter
}
}
if
永远不会评估为真,无论我把它放在我的字符串中。
以下是我正在尝试编码的complete program。
答案 0 :(得分:6)
应使用正确的编码编译代码:
javac -encoding UTF-8 Foo.java
某处会出现编码不匹配的情况。
public class Foo {
char [] a = {'à', 'á', 'â', 'ä' };
}
保存为UTF-8的上述代码应该成为十六进制转储:
70 75 62 6C 69 63 20 63 6C 61 73 73 20 46 6F 6F public class Foo
20 7B 0D 0A 20 20 63 68 61 72 20 5B 5D 20 61 20 {__ char [] a
3D 20 7B 27 C3 A0 27 2C 20 27 C3 A1 27 2C 20 27 = {'__', '__', '
C3 A2 27 2C 20 27 C3 A4 27 20 7D 3B 20 20 0D 0A __', '__' }; __
7D 0D 0A 0D 0A }____
代码点U + 00E0(à)的UTF-8值为C3 A0
。
应使用正确的编码编译代码:
javac -encoding UTF-8 Foo.java
有一个外部机会,à将由组合序列U + 0061 U + 0300表示。这是NFD表单(我从未遇到过将其用作文本输入默认值的文本编辑器)。作为Thorbjørn Ravn Andersen points,通常最好总是使用\ uXXXX转义序列 - 它不那么模糊。
您还需要检查输入设备(文件/控制台/等)
作为最后的手段,您可以将char
转换为十字System.out.format("%04x", (int) c);
,然后尝试使用character inspector手动解码它们,以了解它们是什么。
答案 1 :(得分:5)
要使Unicode字符起作用,您必须确保javac以与编写它相同的编码读取它。
只需使用\ uXXXX表示法就可以省去很多麻烦。
答案 2 :(得分:1)
查找Unicode字符值,并使用\uxxxx
形式的文字。
U + 00e是带有重音符号的,例如
char aacute = '\u00e1';
下一个问题是你的字符串来自哪里。你确定它有这些字符吗?作为组成人物?最好用十六进制打印一些并看看。
您可能需要规范化(在Java 1.6或icu4j中)。
答案 3 :(得分:1)
这似乎对我的快速测试有用:
static char [] a = {'à', 'á', 'â', 'ä' };
public static boolean foundMatch(String s){
boolean test = false;
for(int i=0;i < a.length;i++){
String t = String.valueOf(a[i]);
test = s.contains(t);
if (test) return true;
}
return test;
}
答案 4 :(得分:1)
你没有提到你需要完成什么(也就是为什么你需要在一个字符串中找到突出的字符),我猜测你需要做的不仅仅是检查是否存在重音字符。一块输入。告诉你已经知道的事情的风险: