java - 是什么让“getCharNumber”方法不区分大小写,而它只检查小写字母(作者 CtCI)
问题描述
public class Common {
public static int getCharNumber(Character c) {
int a = Character.getNumericValue('a');
int z = Character.getNumericValue('z');
int val = Character.getNumericValue(c);
if (a <= val && val <= z) {
return val - a;
}
return -1;
}
public static int[] buildCharFrequencyTable(String phrase) {
int[] table = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1];
for (char c : phrase.toCharArray()) {
int x = getCharNumber(c);
if (x != -1) {
table[x]++;
}
}
return table;
}
}
上述算法用于测试字符串是否是回文的排列,由 CtCI (Cracking the Coding Interview) 编写。
我的问题:为什么getCharNumber
方法不区分大小写?
我认为它应该区分大小写,因为它只检查小写字符。
解决方案
为什么 getCharNumber 不区分大小写?
该getCharNumber
方法使用 Java 的Character#getNumericValue(char)
方法,它的JavaDoc特别指出:
大写字母 AZ('\u0041' 到 '\u005A')、小写字母('\u0061' 到 '\u007A')和全角变体('\uFF21' 到 '\uFF3A' 和 '\uFF41'通过 '\uFF5A') 形式具有从 10 到 35 的数值。这与 Unicode 规范无关,Unicode 规范不为这些 char 值分配数值。
这意味着例如对于字符A
和a
此 API 方法返回相同的值,即10
,因此不区分大小写。
供参考,另请参阅
推荐阅读
- javascript - 加载后立即使用动态加载的javascript?
- mysql - 具有多态连接的 Laravel 查询生成器在 SQLite 上不起作用
- forms - 文件上传超过 Zend 1 中定义的 ini 大小
- apache-kafka - 合并两个卡夫卡流是否保留共同分区
- c++ - Windows 是否有集成的内置 C/C++ 编译器包?
- angular - 防火墙问题以角度安装 npm 包
- java - 使用 Java 将代码生成到现有文件中
- mongodb - 拥有多个 Mongo 数据库是否会对性能产生影响?
- sql - Oracle SQL - 以不同的顺序连接两个表
- python - 将字符串日期拆分为多个日期列表