`

读JavaAPI源代码——整数和字符串间的转换

 
阅读更多

读JavaAPI源代码——整数和字符串间的转换

如果让您亲自动手来来写一个Integer中的toString()方法和parseInt()方法,您会怎么写?
请您先动手写toString()方法。

我对于toString()的思路:
1.首先需要得到这个Integer数值的位数,所以肯定有一个getIntegerSize()的private方法
2.然后要把这个Integer数值转化为一个字符数组,所以也要有一个getChars()的private方法
3.最后只要把这个字符数组转化为字符串返回即可

在编写完我们的代码,再确定对于现在自己的实力,已经没有再做优化的可能之后,再来看Integer中的toString()来领教一下高手的代码是怎么写的。

下面是这个过程中最重要的一步:将数值转成字符数组;
其中用使用来三个表(DigitOnes、DigitTens、digits)作为表驱动法(在代码大全上看到过,但还没用过:P)的快速索引来加快代码的执行效率。

在给出DigitOnes、DigitTens、digits的三个表之后,我相信看懂这段代码应该是比较简单的事情了(可以写一个具体的数字,比如666666带进去试一下)。但是采用上面的代码来实现仍然存在一个缺陷,就是Integer.MIN_VALUE是不能采用这种方式来转换的。以为当其转化为整数后将要超出Integer的最大范围,所以在toString()方法中还要加入预防措施。

虽然API的实现耗费了不少空间,但是其效率要比我写的要快多了(- -!!)。如果大家不明白上面的位移操作符可以看:Java中的位移运算符

对于得到一个整数数值的位数,我采用了的是不断取余操作(不知道多少兄弟和我想到一块儿去了,^ ^。但是取余操作效率相比之下要慢上不少)。那么API是如何快速得到一个整数数值的位数的呢?其中又采用了表驱动法来取代if-else:

这样toString()方法就实现了。

接下来请大家动手写parseInt()的方法:
下面是我的思路
1.首先自然也是要取得这个字符串的长度,不过这里很简单,直接使用String的length()方法就可以了
2.取出字符串中的第一个字符,判断是否是正负符号。如果不是的话则判断是否符合整数的条件,由于
这里取出的整数和ASCII码相差48,取出的数需要减去48之后,再加入到result中,然后将result * 10
3.不断循环,知道result的长度达到字符串的长度,或者result的值超越的整数的最大范围,则退出程序。

以下是API中的源码(省略其中转为其他进制数的代码):

分享到:
评论

相关推荐

    JAVA_API1.6文档(中文)

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    JAVA基本类源代码

    3. `Integer`类:作为`int`的包装类,提供了将整数与字符串之间转换的便利方法,以及一些数学运算和比较操作。研究`Integer`源码有助于理解自动装箱拆箱的过程。 4. `ArrayList`类:基于数组实现的动态列表,允许在...

    小数进制转化器 源代码 文档API

    在Java中,可以使用Integer或Long类的toString方法将整数转换为特定进制的字符串,然后通过Integer.parseInt或Long.parseLong方法反向转换。对于小数,可能涉及到浮点数的二进制表示和位运算,这需要对浮点数的内部...

    java api最新7.0

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。...

    Java开发技术大全(500个源代码).

    ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...

    JAVA上百实例源码以及开源项目源代码

    Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰效果 Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、...

    ognl-2.6.11的源代码

    源代码还会展示OGNL提供的API,包括如何创建和执行表达式,如何设置和获取上下文,以及如何自定义类型转换和对象访问策略。 9. **性能优化**: 为了提高性能,OGNL可能实现了表达式的缓存和编译,将表达式转换为...

    Java 1.6 API 中文 New

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。...

    JavaAPI1.6中文chm文档 part1

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    用java语言写的实现输入整数

    `Scanner`是Java API中的一个类,它允许我们从各种数据源(如键盘、文件等)读取基本类型和字符串。下面我们将详细解释如何使用Java实现输入整数。 首先,我们需要导入`java.util.Scanner`包,因为`Scanner`类就...

    java解惑(源代码+教程)

    3. **字符串操作**:Java中的字符串是不可变的,这意味着任何对字符串的操作都会创建新的对象。理解这一点对于优化代码和避免内存浪费至关重要。 4. **数组与集合**:Java提供了多种数据结构,如数组、ArrayList和...

    json源代码

    这些源代码文件包含了处理JSON字符串到对象,以及对象到JSON字符串转换的核心逻辑。在各种编程语言中,如Python、Java、C++、JavaScript等,都有对应的JSON库或模块,它们提供了API供开发者使用。 1. **JSON的基本...

    Java7程序设计入门经典源代码

    Java7还引入了字符串的switch语句支持,这使得开发者能够更方便地处理字符串比较,而不仅仅是整数和枚举类型。例如: ```java String day = "Monday"; switch (day) { case "Monday": System.out.println("今天是...

    java API JDK 1.7 英文

    4. **字符串转换为整数**:`Integer.parseInt()`方法现在可以处理空字符串,如果字符串为空,它会抛出`NumberFormatException`。 5. **菱形运算符(Diamond Operator)**:在创建匿名类实例或泛型集合时,可以使用...

    hbase0.94java源代码

    它是无序的,通常建议使用可排序的字符串或自增整数。 3. 列族(Column Family):列族是数据的逻辑分组,每个列族可以包含任意数量的列(Column)。列由列族名加上列限定符(Qualifier)来唯一标识。 4. 时间戳...

    JAVA课程设计源代码(8个)

    这些JAVA课程设计源代码涵盖了多个基础到进阶的编程概念,是学习和理解JAVA语言以及游戏和实用软件开发的良好实践。下面将详细解释每个项目所涉及的知识点: 1. **打砖块**:这是一个基于JAVA的简单游戏,涉及到...

    源代码以及protobuf文件转换工具

    这段代码定义了一个名为`Person`的消息类型,包含三个字段:`name`(字符串)、`id`(整数)和`email`(字符串)。字段后面的数字是它们的标签,用于在序列化和反序列化过程中标识字段。 接下来,使用Google提供的`...

    CS4308-Lightweight-Java-Interpreter-:适用于整数和字符串文字; 读取2种类型的Java语句

    本项目“CS4308-Lightweight-Java-Interpreter”专注于创建一个轻量级的Java解释器,特别关注于整数和字符串文字的处理,以及两种关键的Java语句:对象创建和方法调用。这个解释器利用了Java的反射特性,使得它能...

    专题之Java字符转换.pdf

    Java字符编码转换是Java开发中一个重要的主题,尤其是在处理多语言环境...总之,Java字符编码转换是一个复杂且需要细心处理的问题,开发者需充分理解各种编码方式和Java的相关API,以确保数据的准确无误地传输和存储。

    Android-轻量级Android库用来比较版本字符串

    开发者可以通过查看库的源代码(可能在GitHub或其他代码托管平台)来了解其具体实现和用法。 在实际应用中,这个库可以帮助开发者轻松地进行版本号比较,例如: ```java Version version1 = new Version("1.2.3");...

Global site tag (gtag.js) - Google Analytics