• Leecode no.8 字符串转数组


    package com.example.demo.leecode;

    /**
    * 字符串转整数
    * @Date 2020/11/25
    * @author Tang
    *
    * 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
    *
    * 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
    * 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
    * 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
    * 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
    *
    * 在任何情况下,若函数不能进行有效的转换时,请返回 0 。
    *
    * 提示:
    *
    * 本题中的空白字符只包括空格字符 ' ' 。
    * 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
    */
    public class StringToInteger {

    String str;

    int index = 1;

    public int change(String s){
    //字符串为null情况
    if(s == null){
    return 0;
    }

    this.str = s.trim();
    char[] chars = str.toCharArray();
    //都是空格字符情况
    if (chars.length == 0){
    return 0;
    }

    //如果首字母是符号
    if(ifSymbol(chars[0])){
    getIndex(chars);

    }else if(ifNum(chars[0])){
    //去掉开头的所有0
    chars = getNoZeroBegin(chars, 0);
    if(chars.length == 0){
    return 0;
    }

    //去掉0后还非法
    if(ifSymbol(chars[0]) || !ifNum(chars[0])){
    return 0;
    }

    getIndex(chars);
    }else{
    return 0;
    }

    ///只有一个符号位,后边没有数字
    if(index == 0 && ifSymbol(chars[0])){
    return 0;
    }

    int res = 0;
    String result = String.valueOf(chars, 0, index+1);
    try {
    res = Integer.parseInt(result);
    }catch (Exception e){
    if(chars[0] == '-'){
    return Integer.MIN_VALUE;
    }else{
    return Integer.MAX_VALUE;
    }
    }

    return res;
    }

    //获取要截取数字的结束位置
    private void getIndex(char[] chars){
    for(;index < chars.length; index++){
    if(!ifNum(chars[index])){
    break;
    }
    }
    index --;
    }

    //递归获取首字符为0的字符数组
    private char[] getNoZeroBegin(char[] chars, int index){
    if(chars.length == 0){
    return chars;
    }

    if(chars[index] == '0'){
    String s = String.valueOf(chars, index+1 , chars.length - index-1);
    chars = s.toCharArray();
    chars = getNoZeroBegin(chars, index);
    }
    return chars;
    }

    /**
    * 判断是否为正负号
    * @param c
    * @return
    */
    private boolean ifSymbol(char c){
    return c == '+' || c == '-';
    }

    /**
    * 判断是否是数字
    * @return
    */
    private boolean ifNum(char c){
    return c > '0' && c < '9';
    }


    public static void main(String[] args) {

    //应输出42
    String value1 = "42";

    //应输出-42
    String value2 = " -42";

    //应输出4193
    String value3 = "000cc4193 with words";

    //应输出0
    String value4 = "words and 987";

    //应输出0
    String value5 = null;

    //应输出0
    String value6 = " 0000000000000 ";

    StringToInteger stringToInteger = new StringToInteger();
    int change = stringToInteger.change(value6);
    System.out.println(change);
    }


    }
  • 相关阅读:
    WinForm多线程+委托防止界面假死
    C#中异步及winform中界面假死
    js如何判断当前文本的输入状态——中文输入法的那些坑
    数据库主键设计之思考
    node.js使用superagent实现模拟登陆功能(包含下载验证码功能)
    application.properties在Spring Boot项目中的位置
    ubuntu18.04安装chromium浏览器
    ubuntu 18.04安装mysql 8
    Spring Boot学习笔记——搭建一个最简单的hello world
    ubuntu 18.04安装jdk8和eclipse
  • 原文地址:https://www.cnblogs.com/ttaall/p/14035846.html
Copyright © 2020-2023  润新知