代码来源于 https://svn.apache.org/repos/asf/harmony/enhanced/classlib/archive/java6/modules/luni/src/main/java/java/lang/Integer.java
public static int parseInt(char[] chars) {
return parseInt(chars, 0, chars.length);
}
public static int parseInt(char[] chars, int offset, int length) {
return parseInt(chars, offset, length, 10);
}
public static int parseInt(char[] chars, int offset, int length, int radix)
throws NumberFormatException {
if (chars == null || radix < Character.MIN_RADIX
|| radix > Character.MAX_RADIX) {
throw new NumberFormatException();
}
if (length == 0) {
throw new NumberFormatException("Unable to parse");
}
int i = 0;
boolean negative = (chars[i + offset] == '-');
if (negative && ++i == length)
throw new NumberFormatException("Unable to parse");
if (negative) {
offset++;
length--;
}
return parseInt(chars, offset, length, radix, negative);
}
/**
* 这个方法把要解析的字符数组映射到了负数的范围内。因为java int 的取值范围是 -2^32 ~ 2^31,负数的取值范围比正数要大
* @param chars 字符数组
* @param offset 有效的字符起始 idx
* @param len 有效字符长度
* @param radix 基数,比如 10 进制,2 进制啥的
* @param negative 这个数是不是负数
* @return
* @throws NumberFormatException
*/
public static int parseInt(char[] chars, int offset, int len, int radix,
boolean negative) throws NumberFormatException {
//这里的 max 取值是负数,下面解析出来的数都是负数。这里的 max 是绝对值最大,而不是实际值最大
int max = Integer.MIN_VALUE / radix;
int result = 0;
for (int i = 0; i < len; i++) {
//解析出来的第一个数字
int digit = Character.digit(chars[i + offset], radix);
if (digit == -1) {
throw new NumberFormatException("Unable to parse");
}
if (max > result) {
throw new NumberFormatException("Unable to parse");
}
//映射到负数的范围内,解析出来的数字要被减去。next 的值要比已经保存的值(next) 小
int next = result * radix - digit;
if (next > result) {
throw new NumberFormatException("Unable to parse");
}
result = next;
}
if (!negative) {
result = -result;
if (result < 0) {
throw new NumberFormatException("Unable to parse");
}
}
return result;
}
分享到:
相关推荐
### 知识点详解 #### 一、Java 文件读写基础...从文件的创建与写入,到文件的读取和数据的处理,涵盖了文件操作的基本流程。这对于初学者来说是一个很好的实践案例,有助于理解 Java 中文件操作的基本概念和技术细节。
在编程领域,字符串、整型数据和字符型数组是三种基本的数据类型...同时,不同编程语言可能有不同的实现方式,这里以C++和Java为例进行了展示。了解并熟练掌握这些转换技巧,对于提升编程效率和代码质量有着重要作用。
* 它是一个 final 的 char 数组,用于存储字符串的值。 * 它不能被修改,例如不能在原串上进行追加或删除操作。 * 它可以通过抽象类 AbstractStringBuilder 和 StringBuilder 实现字符串的追加和删除操作。 ...
Java 实现字符串转 String 数组的方法示例 Java 实现字符串转 String 数组的方法是java编程中常见的操作,下面我们将详细介绍这种方法的实现。 字符串遍历 在 Java 中,字符串是一种特殊的对象,我们可以使用循环...
在实际开发中,数组常与其他数据结构(如链表、栈、队列等)结合使用,以实现更复杂的功能。理解并熟练运用数组,对于提升Java编程能力至关重要。通过学习数组的声明、初始化、遍历和操作,可以为后续的Java学习打下...
newpow.append(String.valueOf((char) Integer.parseInt(chars1[i]))); } System.out.println(newpow.toString()); ``` 这部分代码首先将`news`中的ASCII码值分割为单独的字符串数组`chars1`,然后再次遍历该数组...
代码片段中展示了如何使用预定义的十六进制数组`hex`来实现字符到十六进制表示的转换。具体而言,`hex`数组包含了所有可能的ASCII字符对应的十六进制表示。在实现`escape`方法时,遍历字符串中的每一个字符,如果该...
### 实现两个人在控制台进行一字棋的对弈 #### 1. 项目概述 本项目旨在使用Java语言实现一个可以在控制台上运行的两人对弈的一字棋游戏(也称作井字棋)。游戏规则简单:两名玩家轮流在一个3x3的网格中放置标记...
char数组比字符串更适合存储密码,因为char数组可以在使用完毕后被清除,而字符串不能被清除。 19. 字符串的subSequence()方法是什么作用? subSequence()方法用于从原始字符串中提取一个子字符串。 20. 什么是...
String是一个对象,不属于基本数据类型,它基于char数组实现,具有不可变性。 - 字符串操作:字符串反转可以使用StringBuilder或StringBuffer的reverse()方法;替换可以通过replace()方法实现。 - 数据类型转换:...
本资源摘要信息将从 Java 基础知识测试题中抽取相关知识点,总结 Java 基础知识要点,帮助开发者快速掌握 Java 基础知识。 一、变量和数据类型 1. Java 中有哪些基本数据类型? 答:Java 基本数据类型分为四种八类...
在Java 9及以后版本,String对象进一步优化,将char数组替换为byte数组,以节省存储单字节字符时的内存空间,并引入了coder属性来处理不同编码格式,如Latin-1和UTF-16。 String对象的不可变性是其性能优化的关键...
在给出的例子中,`bitString2bytes`方法可以使用`Integer.parseInt`方法逐个解析字符串中的二进制数字,然后将它们转换为字节。例如,如果字符串"00111100 11110000"是两个字节的二进制表示,可以将其拆分为两部分,...
字符串可以使用多种方式转换为数字类型,例如使用 parseInt() 方法将字符串转换为整型、使用 parseDouble() 方法将字符串转换为双精度型等。 字符串也可以使用多种方式将数字类型转换为字符串,例如使用 toString()...
23. 数组排序:`arr.length` 获取数组长度,`arr[i]=arr[j]` 和 `arr[j]=temp` 实现数组元素交换。 24. 图形界面:`init` 和 `paint` 方法是Java图形用户界面(GUI)编程中绘制组件的方法,`g.drawString(str,25,25...
反转可以通过翻转其字符数组实现;替换则可以使用replace()方法。 3. 数据类型转换主要涉及装箱和拆箱操作。例如,Character与int间的转换,可以通过Character.getNumericValue()和Integer.parseInt()等方法完成。...
5. **`public String(char[] value, int offset, int count)`**:根据给定的 char 数组的一部分创建一个字符串,从 `offset` 开始,长度为 `count`。 6. **`boolean equals(Object anObject)`**:检查当前字符串...
1. **初始化**:将字符串转换为字符数组。 2. **递归过程**: - 如果当前层次只剩下一个字符,则直接输出。 - 否则,遍历剩余的所有字符,进行交换,并递归调用。 3. **恢复现场**:在返回之前,需要将交换的字符...