leetcode String to Integer (atoi) java基本编程学习(二)

来源:互联网 发布:2017成都软件行业 编辑:程序博客网 时间:2024/06/05 21:05

目标:  通过完成笨题目学习java编程的同时,通学java的String类。

一.   java String学习    【 参考学习链接:  http://sarin.iteye.com/blog/603684    好文章!!!】  测试代码:  StringTest

                                     【 学习链接  : http://www.importnew.com/9622.html 】

    1)   内存分配:

        栈内存  :    对象的引用                     >>>>>>>>        堆内存  : 对象

         常量区 String

    2)  Sting类    本质是 字符数组  char[]  ;    

                           其次String类是final的,是不可被继承的,这点可能被大多数人忽略;

                         再次String是特殊的封装类型,使用String时可以直接赋值,也可以用new来创建对象,但是这二者的实现机制是不同的(不同于别而 类);

                         String池的概念,Java运行时维护一个String池,池中的String对象不可重复,没有创建,有则作罢。String池不属于堆和栈,而是属于常量池。

                       任何重新修改String都是重新分配内存空间,这就使得String对象之间互不干扰。即String中的内容一旦生成不可改变,直至生成新的对象。

                      使用+连接字符串每次都生成新的对象,而且是在堆内存上进行,而堆内存速度比较慢(相对而言),那么再大量连接字符串时直接+是不可取的,当然需要一种效率高的方法。Java提供的StringBuffer和StringBuilder就是解决这个问题的。区别是前者是线程安全的而后者是非线程安全的,StringBuilder在JDK1.5之后才有。不保证安全的StringBuilder有比StringBuffer更高的效率。 

二.  代码实现:

      参考链接: http://www.2cto.com/kf/201501/369347.html       http://www.programcreek.com/2012/12/leetcode-string-to-integer-atoi/

 

<span style="font-size:12px;">public class Solution {    public int myAtoi(String str) {       // if(str == NULL || str.length()<0)    //null是大小写敏感的,不能写成NULL 、 Null等。       if(str == null || str.length()<=0)            return 0;    //下面的判断都是在str非空的情况的进行的        //首先去掉前面的空格        str = str.trim();        //判断String中是否很有正负号(因为数据的正负号肯定在数据的最前面)        char flag ='+';   //char是单引号('')        int i = 0;        if(str.charAt(i) == '-'){            flag = '-';            i++;        }else if(str.charAt(i) == '+'){            i++;        }        //接下来string to integer        double res = 0;        //不存在单独对字母的判断,因为如果刚开始是字母,就不会执行下面的,如果中途有字母也会终止,返回前面的值        while(str.length()>i && str.charAt(i)>='0' && str.charAt(i)<='9'){            res = res *10 + str.charAt(i)-'0';  //因为charAt返回的是char类型,所以通过-‘0’将char类型转换成int型            i++;        }        if(flag == '-')            res = -res;    //因为正数和负数绝对值差1,所以这里需要先标出正负,在进行int越界的判断                if(res > Integer.MAX_VALUE)            return Integer.MAX_VALUE;        if(res < Integer.MIN_VALUE)            return Integer.MIN_VALUE;                    return (int)res;    }}</span>






      




0 0