我应该如何在Java中指定Asian char和String,常量?

时间:2014-01-01 02:51:40

标签: java character

我需要对日语句子进行标记。表示假名和汉字的 char 值的最佳做法是什么?这就是我通常会做的事情:

String s = "a";
String token = sentence.split(s)[0];

但是,我认为以下内容并不好:

String s = String.valueOf('あ'); // a Japanese kana character  
String token = sentence.split(s)[0];

因为阅读我的来源的人可能无法阅读或显示日文字符。我宁愿不通过写实际角色来侮辱任何人。我想要一个“romaji”,或者某种东西,代表。这是我正在使用的真正愚蠢的“解决方案”的一个例子:

char YaSmall_hira_char  = (char) 12419; // [ゃ] <--- small
char Ya_hira_char       = (char) 12420; // [や]
char Toshi_kj_char      = (char) 24180; // [年]
char Kiku_kj_char       = (char) 32862; // [聞]

这看起来非常荒谬。并且,它不可持续,因为有超过2,000个日文字符......

我的IDE和 java.io.InputStreamReaders 都设置为UTF-8,我的代码工作正常。但是字符编码错误的幽灵笼罩在我的头上,因为我只是不明白如何将亚洲字符表示为 chars

我需要清理我写的垃圾,但我不知道要去哪个方向。请帮忙。

3 个答案:

答案 0 :(得分:4)

  

因为阅读我的来源的人可能无法阅读或显示日文字符。

那么在处理这些字符时,如何对代码做任何有用的事情是它的一个整体部分?

只需确保您的开发环境设置正确,以便在源代码中支持这些字符,并且您已制定相应的过程以确保使用该代码的每个人都能获得相同的正确设置。至少在项目描述中记录它。

然后在源代码中直接使用这些字符没有任何问题。

答案 1 :(得分:3)

我同意你目前正在做的事情是不可持续的。它非常冗长,无论如何都可能浪费你的时间。

您需要问自己,您期望究竟是谁来阅读您的代码:

  • 日本本土发言人/作家可以阅读假名。他们不需要罗马字,并且可能会认为它们是可读性的障碍。

  • 非日语使用者无法辨别角色的含义,无论是作为假名还是罗马字。你的努力会浪费在他们身上。

  • 只有可能受到罗马字母帮助的人才会是非母语的日语使用者,他们还没有学会读/写假名(还)。我想他们可以轻松找到一个桌面工具/应用程序,用于将Kana映射到romanji。

让我们回到你认为“不好”的例子。

String s = String.valueOf('あ'); // a Japanese kana character  
String token = sentence.split(s)[0];

即使对于不能阅读(或说)日语的人(像我一样),该代码的表面含义也很清楚。您正在使用日语字符作为分隔符拆分String。

现在,我不明白那个角色的意义。但我不会,如果它是一个罗马字名称的常数。此外,有可能我不需要知道以了解应用程序正在做什么。 (如果我确实需要知道,我可能是错误的人阅读代码。对于您的应用程序域,必须具备良好的日语能力!!)

您提出的关于无法显示日文字符的问题很容易解决。程序员只需要升级可以显示Kana的软件。任何体面的Java IDE都能够应对......如果配置正确的话。此外,如果这是一个真正的问题,适当的解决方案(对于程序员!)是使用Java的Unicode转义序列机制来表示字符; e.g。

String s = String.valueOf('\uxxxx');  // (replace xxxx with hex unicode value)

Java JDK包含可以重写Java源代码以添加或删除Unicode转义的工具。程序员需要做的就是在尝试阅读之前“逃避”代码。


旁白:你写了这个:

  

“我不想通过写实际角色来侮辱任何人。”

什么?没有西方人会或者应该认为假名是一种侮辱!他们可能无法阅读,但这不是侮辱/侮辱。 (如果他们确实感到真的受到侮辱,那么坦率地说那是他们的问题 ......不是你的。)

唯一重要的是非日语读者是否可以完全理解你的代码......以及这是否是你应该试图解决的问题。担心解决无法解决的问题并不是一项富有成效的活动。

答案 2 :(得分:1)

我认为迈克尔有正确的答案。 (将此作为答案而不是评论发布,因为评论大小有限;向那些对这种区别挑剔的人道歉。)

如果有人正在使用您的代码,那将是因为他们需要更改日语句子的标记方式。至少在某种程度上,他们能更好地处理日文字符,或者他们无法测试他们所做的任何改变。

正如您所指出的,替代方案当然不具有可读性。也许不那么;即使不懂日语,我也可以阅读你的代码并知道你使用'あ'字符作为分隔符,所以如果我在输入字符串中看到那个字符,我知道输出是什么。我不知道这个字符意味着什么,但是对于这个简单的代码分析我不需要。

如果您想让我们这些不了解完整字母表的人更容易一些,那么在提及单个字符时,可以在评论中为我们提供Unicode值。但是任何支持Unicode的文本编辑器都应该有一个函数告诉我们我们指向的角色的数值--Emacs高兴地告诉我它是#x3042 - 所以这对于我们这些人来说纯粹是礼貌的可能不应该弄乱你的代码。