java判断日文_如何判断字符串中含有日文字符

展开全部

最近做的东西有这么一个需要:判断一个字符串e68a84e8a2ad62616964757a686964616f31333337376261中是否含有日文字符。最直观的想法就是使用正则表达式,因此上网一搜,找到了这个 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 编码的文本文件,里面分别用汉字和日文写了“足”这个字 )。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值