如何判断字符串中含有日文字符
发布网友
发布时间:2022-05-29 04:19
我来回答
共1个回答
热心网友
时间:2024-10-22 20:28
最近做的东西有这么一个需要:判断一个字符串中是否含有日文字符。最直观的想法就是使用正则表达式,因此上网一搜,找到了这个 utf-8 对应的日文字符列表:http://ash.jp/code/unitbl21.htm 。满心欢喜,按照列表,用utf-16指定的区间,再用正则表达式方式写了一个判断方法。
测试了几个单词,正确。不过测试了几个汉字,发现不对。
仔细看了看那个表,发现 字母和假名部分,utf-16是连续的,但是汉字和特殊字符部分,就不是连续的了。这就是用正则表达式也得累死人!
再看看那个表,SJIS 编码的code是连续的,恩,可以使用区间,所以字符串得转换一下:
Java代码
str = new String(str.getBytes(), "UTF-8");
byte[] bt = str.getBytes("SHIFT-JIS");
不过那个表也真大阿!!就算用 shift-jis编码,正则表达式也不短!
在输出 byte[] 的时候,发现如果是中文的话,那么 byte[] 的长度会小于4,而且不会被2 整除。于是乎,方法来了:
Java代码
return bt.length %2 == 0;
这个方法可以判断一个字符是否为日文字符,那么判断字符串中是否包含日文字符也不难了。
以下是测试类:
Java代码
assertTrue(CharacterUtil.isContainJapaneseCharacter("亜亜"));
assertTrue(CharacterUtil.isContainJapaneseCharacter("お早う"));
assertTrue(CharacterUtil.isContainJapaneseCharacter("学校"));
assertTrue(CharacterUtil.isContainJapaneseCharacter("お早う,tom!"));
assertFalse(CharacterUtil.isContainJapaneseCharacter("严"));
assertFalse(CharacterUtil.isContainJapaneseCharacter("tom"));
try {
InputStream is = getClass().getClassLoader().getResourceAsStream("util/CharacterTest.utf_8");
LineNumberReader ln = new LineNumberReader(new InputStreamReader(is, "UTF-8"));
// 汉字 足
assertTrue(CharacterUtil.isContainJapaneseCharacter(ln.readLine()));
// あし 足
assertTrue(CharacterUtil.isContainJapaneseCharacter(ln.readLine()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
其中比较特殊的是 “足”之类的文字,在 UNICODE 列表中,中日韩有几部分是公用一些汉字的。(CharacterTest.utf_8 是一个 utf-8 编码的文本文件,里面分别用汉字和日文写了“足”这个字 )。
如何判断字符串中含有日文字符
最近做的东西有这么一个需要:判断一个字符串中是否含有日文字符。最直观的想法就是使用正则表达式,因此上网一搜,找到了这个 utf-8 对应的日文字符列表:http://ash.jp/code/unitbl21.htm 。满心欢喜,按照列表,用utf-16指定的区间,再用正则表达式方式写了一个判断方法。测试了几个单词,正确。不...
c#如何判断字符串是否有日文
日文在unicode中的编码范围你查一下,当你要判断这个字符是不是日文的时候,只需要查一下这个字符的编码是不是在日文编码范围就可以了。祝你成功!
UTF8如何区分中日韩混合的字符串中的字符? - PHP进阶讨论
虽然对应的汉字不一样,但都是有效汉字。所以严格地说,是无法判断的。但从UTF8编码规则看,字符串有几种固定的组合:110xxxxx,10xxxxxx,10xxxxxx 1110xxxxx,10xxxxxx,10xxxxxx,10xxxxxx 等,如果符合这个条件,那么可以说“字符串为UTF8编码的可能性非常大”。
c#怎么判断字符串是不是片假名,做文件处理,表中某一列的数据怎么知道它...
下面这个是我网上找到,用的是正则表达式匹配,你看看。这些字符集尤其是日文字符集的各种字、标点以及特殊符号的时候有所帮助。UTF8 [\x01-\x7f]|[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3} UTF16 [\x00-\xd7][\xe0-\xff]|[\xd8-...
如何在一个带有日文的字符串中查找指定的日文字符?
source="2009年03月19日顷";rec=eregi("未确定",$source);eregi -- 不区分大小写的正则表达式匹配 返回布尔值。
如何在一个带有日文的字符串中查找指定的日文字符?
source="2009年03月19日顷";rec=eregi("未确定",$source);eregi -- 不区分大小写的正则表达式匹配 返回布尔值。
如何VBA使用识别中文及日文
Excel函数:PHONETIC 提取文本字符串中的拼音 (furigana) 字符。该函数只适用于日文版。不过我从网上找到一些日文,然后使用这个函数后与使用前比较是False。而全部是中文是True.会用VBA,怎么使用这个函数不用说了吧
VB6/VBA - InStr/InStrRev 内存溢出,求专业人士解答!
尽管你可能不愿意听,但这确实是VB语言的一个Bug,只要字符串中含有如下日文字符(并不是全部日文字符),在进行文本比较时就会出错(二进制比较则不会出错):ゴガギグゲザジズヅデドポベプビパヴボペブピバヂダゾゼ 这个Bug已经被微软通过补丁更正。可以用变通的方法实现不区分大小写的字符串查询...
判断该字符串中是否含有中文字符的java代码
//Java判断一个字符串是否有中文是利用Unicode编码来判断,// 因为中文的编码区间为:0x4e00--0x9fbb return true;} } return false;} if(a>255 || a<0 ) 仅仅判断的是非英文字符,该条件得出的结果有中文字符有中文标点符号有日文和韩文 if ((a >= 0x4e00) && (a <= 0x9fbb))这...
字符串包含某个字符串用什么方法
另外,在Excel中,对文本进行处理的很多函数都提供了一个特别用来处理双字节字符(如中文,日文)的函数,一般是在原函数后加“B”,如FIND, 就有一个FINDB。LEFT,相对应的就是LEFTB等。其实,我们在实际应用中,使用不带“B”的函数就足够了。如果你想使用带“B”的函数,则要特别注意,尤其是在...