CodeGym /Java 博客 /随机的 /Java isDigit 方法
John Squirrels
第 41 级
San Francisco

Java isDigit 方法

已在 随机的 群组中发布
返回布尔值的方法通常以单词“is”开头,意思是检查被检查的元素是否符合特定条件。我们将在本文中讨论的 Character.isDigit() 方法确定指定的 char 值是否为 数字

Java isDigit 方法语法

java.lang.Character.isDigit(char ch)是Java内置的判断指定字符是否为数字的方法。“一个数字”在 Java 编程上下文中是什么意思?根据 Java Doc 中的定义,如果Character.getType(ch)方法返回DECIMAL_DIGIT_NUMBER常量,那么该字符就是一个数字。下面是一些包含数字的 Unicode 字符范围:
  • 从 '\u0030' 到 '\u0039' 是 ISO-LATIN-1 数字('0' 到 '9')

  • 从 '\u0660' 到 '\u0669' 是阿拉伯-印度数字

  • 从 '\u06F0' 到 '\u06F9' 是扩展的阿拉伯-印度数字

  • 从 '\u0966' 到 '\u096F' 是梵文数字

  • 从 \uFF10' 到 '\uFF19' 是全角数字

还有一些其他范围包含数字。但是,大多数情况下我们会使用从“\u0030”到“\u0039”的数字。Character.isDigit()的语法在这里:

public static boolean isDigit(char myChar)
其中myChar是要测试的字符。如果字符是数字,则此方法返回true ,否则返回false。根据 Java 文档isDigit(char myChar)方法无法处理增补字符。要支持所有 Unicode 字符,包括增补字符,程序员应使用 isDigit (int)方法。它看起来是一样的,但是,由于 OOP 和多态性支持,工作方式有点不同。 public static boolean isDigit(int codePoint)确定指定字符(Unicode 代码点)是否为数字。在字符编码术语中,代码点或代码位置是对应于特定字符的数值。如果字符是数字,isDigit(int codePoint)也返回true ,否则返回false

Java isDigit方法简单示例

让我们尝试使用 Java Characher.isDigit()方法。首先,我们将编写一个简单的程序来演示该方法。

public class isDigitTest {
//isDigit(char ch) simple example
   public static void main(String[] args)
   {

       //characters to check using isDigit Java method
       char myChar1 = '5', myChar2 = 'u', myChar3 = '0';

       // Function to check if the character
       // is digit or not, using isDigit() method
       System.out.println("is char " + myChar1 + " a digit? "
                       + Character.isDigit(myChar1));
       System.out.println(
               "is char " + myChar2 + " a digit? "
                       + Character.isDigit(myChar2));

       System.out.println(
               "is char " + myChar3 + " a digit? "
                       + Character.isDigit(myChar3));
   }
}
输出是:
char 5 是数字吗?true 是 char ua 数字吗?false 是 char ua 数字吗?真的

Java isDigit 方法,稍微复杂一点的例子

让我们尝试使用Character.isDigit()在一个更有趣和现实生活中的问题中。有一种压缩方法称为游程编码,简称RLE。游程编码是一种数据压缩算法,它用一个字符及其重复次数代替重复的字符(系列)。系列是由几个相同字符组成的序列。编码(打包、压缩)时,组成一系列的相同字符的字符串被包含重复字符本身及其重复次数的字符串替换。因此,如果您有一个字符串“hhhhhorrribleeee”,运行长度编码会给出一个结果:h5or3ible5。如果你解码字符串,你应该依次检查你是否有数字或非数字字符,如果你有数字,是时候获取数字是什么了。顺便说一句,你们都知道 JPEG 文件。此格式在量化数据上以对角线模式使用游程长度编码的变体。变体是仅编码零值游程的长度,而所有其他值都编码为它们本身。在下面的示例中,我们使用Character.isDigit(char ch)方法解码使用游程编码编码的字符串。如果您有兴趣,请尝试完成该程序,或者更确切地说,创建它的第一部分并编写一个方法来对字符串进行 RLE 编码,以及从文件中读取字符串。或者在检查输入的正确性时从控制台手动输入字符串。下面是一个 RLE 解码的例子:

public class RleTest {

   //the method to decode String using run-length encoding and 
//isDigit() method 
   private static String decodeRle(String encoded) {
       if (encoded.isBlank()) return "";
       StringBuilder result = new StringBuilder();
       int count = 0;
       char baseChar = encoded.charAt(0);
       for (int i = 1; i <= encoded.length(); i++) {
           char c = i == encoded.length() ? '$' : encoded.charAt(i);
//checking using isDigit() method           
if (Character.isDigit(c)) {
               count = count * 10 + Character.digit(c, 10);
           } else {
               do {
                   result.append(baseChar);
                   count--;
               } while (count > 0);
               count = 0;
               baseChar = c;
           }
       }
       return result.toString();
   }
   
public static void main(String[] args) {
//here we are going to decode an RLE-encoded string 
       System.out.println(decodeRle("C3ecddf8"));
   }
}
输出是:
CCCccddffffffff
您可能已经注意到我们没有使用String,而是StringBuilder。为什么?事实上,String是不可变的,我们递增计数器,每次都会创建一个新的字符串。我们在程序中也使用了Character.digit方法。java.lang.Character.digit()是返回字符ch在指定数系中的数值的方法。如果基数不在 MIN_RADIX <= base <= MAX_RADIX 范围内,或者如果ch不是指定基数中的有效数字,则该方法返回 -1。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION