我是java和编码的新手,因此这个问题。
我基本上有一个文本文件,其中包含以十六进制值表示的有效字符集。 例: 0x2000-0x4002,0x5002-0x5F00
现在我有另一个包含字符串的文件。 例: 我正在尝试使用此文件。
我的问题是检查第二个文件的每个字符是否有效且在上述文件所描述的范围内。
所以这就是我在做的事情:
public class Test
{
//This is a function used to build the ranges.
public void build range() {}
//This function will test whether the string str is in given range.
public bool check range(String str)
{
int codePointCount = str.codePointCount(0, str.length());
for( in ti =0; i< codePointCount; i++)
{
int value = str.codePointAt(i);
if( value >= 2000 && value <= 4002 )
continue;
if( value >= 5002 && value <= 5F00 )
continue;
return false;
}
return true;
}
}
请告诉我此代码是否正确或我遗漏了与编码有关的内容。
答案 0 :(得分:2)
我建议使用正则表达式,这是一个想法
boolean ok = !str.matches(".*[^\u2000-\u4002\u5002-\u5F00].*");
答案 1 :(得分:0)
首先进行小修正:
for (int i = 0; i < str.length(); )
{
int value = str.codePointAt(i);
i += Character.charCount(value);
if( value >= 0x2000 && value <= 0x4002 )
continue;
if( value >= 0x5002 && value <= 0x5F00 )
continue;
return false;
}
但就长度/可读性而言,@ EvgeniyDororfeev的答案是最好的。