用Java强调文字

时间:2009-12-21 20:20:56

标签: java unicode literals

我尝试在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

5 个答案:

答案 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)

你没有提到你需要完成什么(也就是为什么你需要在一个字符串中找到突出的字符),我猜测你需要做的不仅仅是检查是否存在重音字符。一块输入。告诉你已经知道的事情的风险:

  • 如果您需要从文本字符串中过滤掉它们,我建议您使用白名单而不是黑名单。
  • 如果您需要按字母顺序对其进行排序而不考虑重音,请使用java.text.Collator而不是自己动手系统。
  • 如果你需要用'基础'字符替换重音字符,那么Collator应该再次提供帮助(其中的分解内容),但我之前没有这样做,所以我可以'告诉你如何准确地这样做。