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

11 篇文章 0 订阅
1 篇文章 0 订阅

目标:  通过完成笨题目学习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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值