1

我是 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;
   } 
}

请让我知道这段代码是否正确,或者我在编码方面遗漏了一些东西。

4

2 回答 2

2

我建议使用正则表达式,这就是想法

    boolean ok = !str.matches(".*[^\u2000-\u4002\u5002-\u5F00].*");
于 2013-02-11T11:14:53.443 回答
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 的答案是最好的。

于 2013-02-11T11:22:04.437 回答