Character.isDigit(c)
时间: 2024-04-30 19:19:32 浏览: 92
`Character.isDigit(c)` 是一个 Java 语言中的静态方法,用于判断一个字符是否是数字字符。如果参数 `c` 是数字字符,则返回 `true`;否则返回 `false`。
例如,下面的代码片段演示了如何使用 `Character.isDigit(c)` 方法来判断一个字符是否是数字字符:
```
char c = '5';
if (Character.isDigit(c)) {
System.out.println(c + " is a digit.");
} else {
System.out.println(c + " is not a digit.");
}
```
输出结果为:
```
5 is a digit.
```
相关问题
int cardNumber = input.nextInt(); int sum = 0; for (int i = 0; i < cardNumber.length(); i++) { char c = cardNumber.charAt(i); if (Character.isDigit(c)) { sum += Character.getNumericValue(c); } }
这段代码的作用是读取用户输入的卡号,并计算卡号中所有数字的总和。但是,代码中存在一个错误,即循环条件中的 i < cardNumber.length() 应该改为 i < cardNumber.length(),否则循环会无限执行下去。
分析源代码中的每个类的成员函数及其作用,分析源代码中的不同类的调用关系package lexer; import java.io.; import java.util.; import symbols.; public class Lexer { public static int line = 1; char peek = ' '; Hashtable words = new Hashtable(); void reserve(Word w) { words.put(w.lexeme, w); } public Lexer() { reserve( new Word("if", Tag.IF) ); reserve( new Word("else", Tag.ELSE) ); reserve( new Word("while", Tag.WHILE) ); reserve( new Word("do", Tag.DO) ); reserve( new Word("break", Tag.BREAK) ); reserve( Word.True ); reserve( Word.False ); reserve( Type.Int ); reserve( Type.Char ); reserve( Type.Bool ); reserve( Type.Float ); } void readch() throws IOException { peek = (char)System.in.read(); } boolean readch(char c) throws IOException { readch(); if( peek != c ) return false; peek = ' '; return true; } public Token scan() throws IOException { for( ; ; readch() ) { if( peek == ' ' || peek == '\t' ) continue; else if( peek == '\n' ) line = line + 1; else break; } switch( peek ) { case '&': if( readch('&') ) return Word.and; else return new Token('&'); case '|': if( readch('|') ) return Word.or; else return new Token('|'); case '=': if( readch('=') ) return Word.eq; else return new Token('='); case '!': if( readch('=') ) return Word.ne; else return new Token('!'); case '<': if( readch('=') ) return Word.le; else return new Token('<'); case '>': if( readch('=') ) return Word.ge; else return new Token('>'); } if( Character.isDigit(peek) ) { int v = 0; do { v = 10v + Character.digit(peek, 10); readch(); } while( Character.isDigit(peek) ); if( peek != '.' ) return new Num(v); float x = v; float d = 10; for(;;) { readch(); if( ! Character.isDigit(peek) ) break; x = x + Character.digit(peek, 10) / d; d = d*10; } return new Real(x); } if( Character.isLetter(peek) ) { StringBuffer b = new StringBuffer(); do { b.append(peek); readch(); } while( Character.isLetterOrDigit(peek) ); String s = b.toString(); Word w = (Word)words.get(s); if( w != null ) return w; w = new Word(s, Tag.ID); words.put(s, w); return w; } Token tok = new Token(peek); peek = ' '; return tok; } }
1. Lexer类
该类是词法分析器的实现类,其中的成员函数和作用如下:
1.1 reserve(Word w)
将单词w添加到哈希表words中,其中w包含单词的词素和词法类型。
1.2 Lexer()
构造函数,初始化保留字和类型的单词,将它们添加到哈希表words中。
1.3 readch()
读取下一个字符,并将其保存到peek中。
1.4 boolean readch(char c)
读取下一个字符,如果该字符与参数c相同,则返回true,否则返回false。
1.5 scan()
词法分析函数,识别输入中的单词并返回对应的Token。该函数使用一个无限循环,通过逐个读取字符来识别单词。在识别过程中,忽略空格和制表符,并处理换行符使行号加1。
2. Word类
该类表示一个单词,其中的成员函数和作用如下:
2.1 Word(String s, int tag)
构造函数,初始化单词的词素和词法类型。
2.2 toString()
将单词转换为字符串。
3. Type类
该类表示一个类型,其中的成员函数和作用如下:
3.1 Type(String s, int tag, int width)
构造函数,初始化类型的名称、词法类型和占用字节数。
3.2 boolean numeric()
判断该类型是否为数字类型。
4. Num类
该类表示一个数字,其中的成员函数和作用如下:
4.1 Num(int v)
构造函数,初始化数字的值。
5. Real类
该类表示一个实数,其中的成员函数和作用如下:
5.1 Real(float v)
构造函数,初始化实数的值。
6. Token类
该类表示一个词法单元,其中的成员函数和作用如下:
6.1 Token(int t)
构造函数,初始化词法单元的类型。
6.2 String toString()
将词法单元转换为字符串。
7. Tag类
该类表示一个词法类型的枚举,其中包含了所有的词法类型。
在源代码中,Lexer类是程序的入口,它通过调用其他类的方法来实现词法分析的功能。具体来说,Lexer类中的scan()方法调用了其他类的构造函数和方法,以识别输入中的单词并生成对应的Token。其中,Word、Type、Num、Real、Token和Tag类是用于表示单词、类型、数字、实数、词法单元和词法类型的类。这些类之间相互独立,没有直接的调用关系,它们只是在Lexer类中被用来表示单词、类型等信息。
阅读全文