LeetCode题解-字符串转数字-Java

简介: 字符串转数字题解,Java版

字符串转数字,这是个很有趣的题目。下面是我的解答,改了好几遍才通过。

class Solution {
   
    public static int myAtoi(String str) {
   
        //如果该字符串第一个字符非有效整数字符、串为空、仅包含空白 返回0
        if(str.isEmpty()) return 0;
        if(str.indexOf(".")!=-1) {
   
            if(str.indexOf(".")==0)return 0;
            str=str.substring(0, str.indexOf("."));
        }
        str=str.trim();
        char[] charArray = str.toCharArray();
        //转换
        int strlength = str.length();
        if(strlength==0)return 0;
        int point=0;
        int sign =-1;
        //开存储空间
        StringBuilder sbu = new StringBuilder(str.length());
        //判断第一位是否为为数符,且不是小数点
        if(isPlusOrMinusSign(charArray[point])||isNumber(charArray[point])){
   
            //若第一位位数符,则置标志位为0
            if(isPlusOrMinusSign(charArray[point])==true) sign=0;
            sbu.append(charArray[point++]);
        }else {
   
            return 0;
        }
        //获取有效值
        while(point<strlength&&isNumber(charArray[point])) {
   
            sbu.append(charArray[point]);
            point++;
        }
        if(sign==0)while(sbu.indexOf("0")==1) sbu.deleteCharAt(sbu.indexOf("0"));
        else while(sbu.indexOf("0")==0) sbu.deleteCharAt(sbu.indexOf("0"));
         if(sbu.length()==0)return 0;
        //delete(sbu.indexOf("0"));
        if(sbu.length()>11) {
   
            if(sbu.charAt(0) == 45) {
   
                return -2147483648;
            }
            return 2147483647;
        }
        if(sbu.length()==1&&sign==0) {
   
            return 0;
        }
        long info = 0;
        info = Long.parseLong(sbu.toString());
        if(info > 2147483647) {
   
            return 2147483647;
        }
        if(info < -2147483648) {
   
            return -2147483648;
        }
        return (int)info;
        //如果转换后的结果越界 返回0 | 2147 4836 47 -2147 4836 48
    }
    public static boolean isNumber(char info) {
   
        return info>=48&&info<=57;
    }

    public static boolean isPlusOrMinusSign(char info) {
   
        if(info==43||info==45) {
   
            return true;
        }
        return false;
    }
}

可以参考看看,效率不高。

目录
相关文章
|
10天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
89 60
|
26天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
37 15
|
15天前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
30 1
|
29天前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
23 9
|
29天前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
44 4
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
49 3
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
16 2
|
2月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
20 2
|
29天前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
15 0
|
29天前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
27 0