我希望能够检测到用户何时:
- 输入日语字符(汉字或假名)
- 输入罗马字符(专有)
目前我正在使用这样的 ASCII 范围(C# 语法):
string searchKeyWord = Console.ReadLine();
var romajis = from c in searchKeyWord where c >= ' ' && c <= '~' select c;
if (romajis.Any())
{
// Romajis
}
else
{
// Japanese input
}
是否有更好、更快(更强...)的方法来做到这一点?
编辑:这个问题可以推广到任何其他具有非 ascii 字符集的语言。
最佳答案
Wikipedia 很不错,右上角有平假名、片假名和汉字的 unicode 范围。我们可以利用这一优势来改进您的算法并获得其他字符集。
private static IEnumerable<char> GetCharsInRange(string text, int min, int max)
{
return text.Where(e => e >= min && e <= max);
}
用法:
var romaji = GetCharsInRange(searchKeyword, 0x0020, 0x007E);
var hiragana = GetCharsInRange(searchKeyword, 0x3040, 0x309F);
var katakana = GetCharsInRange(searchKeyword, 0x30A0, 0x30FF);
var kanji = GetCharsInRange(searchKeyword, 0x4E00, 0x9FBF);
请注意,这应该和你的一样快,只是我觉得更好/更好 :)
确定通用语言集
是的,你可以检测到这样的字符集,但不是真正的语言。由于法语、德语等与英语共享大量字符,而日语与中文共享大量汉字(很明显)。如果没有一个巨大的查找表,你不能清楚地说一个字符来自一种语言的很多字符。
还有一个事实是日本人相当多地使用英语(和标点符号),您的方法会将任何包含罗马化单词或表情符号的内容视为罗马字。
关于c# - 检测日文字符输入和 "Romajis"(ASCII),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15805859/