力扣 剑指 Offer 67. 把字符串转换成整数

java主要使用String类和正则表达式写出来的

```
package test_study;

import java.util.regex.Pattern;

public class StringToInteger {

	/**
	 * 作者: 上河雨滴
	 * 
	 * 功能: 剑指 Offer 67.把字符串转换成整数
	 * 
	 * 我承认这是一坨大便, 我太费了, 
	 * 花了一天时间才勉强做出来, 用例通过感人,改了10几次才通过
	 */
	public int strToInt(String str) {
		int integer = 0; // 返回的整数integer, 默认初始为0
		String num = ""; // 过渡num字符串
		int isInt = 0; // 初始化, 定义int类型过界判断依据, 
                    //百度找不到处理返回int过界解决方法, 只能设置个特征值来判断
		// System.out.println(isInt);
		if (Pattern.matches("^\\s+", str) || str.isEmpty()) {
			// 若为空字符串 或者 空白格字符串 , 返回0;
			return 0;
		} else {
			// 清空字符串两侧空白格
			String s = str.trim();
			// System.out.println(s + s.length());
			/* 切割字符串, 当字符串中间有多个空格时,
            * 例78dd 87 87, 
            * 切割字符串, 取切出来的第一部分重新复制给字符串s, 得到78dd
            */
			for (String a : s.split("\\s+")) {
				// System.out.println(a);
				s = a;
				break;
			}
			// System.out.println(s + s.length());
			// 同理, 切割字符串, 当字符串中间有多个"."时, 切割字符串, 取切出来的第一部分重新复制给字符串s
			for (String a : s.split("\\.")) {
				// System.out.println(a);
				s = a;
				break;
			}
			// System.out.println(s + s.length());
			// 处理字符串中存在多个"-"或者"+",切割字符串, 取切出来的第一部分(含第一个"-"或者"+")重新复制给字符串s
			if (s.indexOf("-", 2) != -1) {
				s = s.substring(0, s.indexOf("-", 2));
			} else if (s.indexOf("+", 2) != -1) {
				s = s.substring(0, s.indexOf("+", 2));
			}
			// 验证一下s
			System.out.println(s);
			/*
			 * 正则判断, 第一位是否为+- ,或者数字,
			 * 
			 * 正则规则\\w*指匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效
			 * 
			 * 我这里开始理解\\w*错误, 本来以为包括匹配空格" " 、"." 、"-", 结果不匹配这几个,
			 * 
			 * 导致想了半天,,,要不然也不会在上面分割字符串
			 */
			String pattern = "^([+-])?\\d\\w*";
			if (Pattern.matches(pattern, s)) {
				String sign = s.substring(0, 1);
				System.out.println("sign" + sign);
				if (sign.equals("-")) {// 字符串第一位为"-", 令isInt=1
					isInt = 1;
					System.out.println(isInt);
				}
				num = num.concat(sign);// 字符串拼接
				for (int i = 1; i < s.length(); i++) {

					if (Pattern.matches("^\\d", s.substring(i, i + 1))) {
						System.out.println(s.substring(i, i + 1));
						num = num.concat(s.substring(i, i + 1));// 分割字符串s连续数字, num对其进行字符串拼接
						System.out.println("num:" + num);
					} else {
						break;// 不连续,终止跳出循环
					}
				}
				// int类型integer如果过界, 就抛出错误, 根据isInt值0或1, 判断 integer过哪一边的界限
				try {
					// String num转换成int类型integer, 超过int范围抛出错误-2147483648
					integer = Integer.valueOf(num);
				} catch (Exception e) {
					if (isInt == 0) {
						return Integer.MAX_VALUE;
					} else {
						return Integer.MIN_VALUE;
					}

				}
			}
			return integer;// 返回值, 不符合返回0 , 符合则正常返回整数
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringToInteger sti = new StringToInteger();
		String str = "+52-22"; // 2147483647
		System.out.println(sti.strToInt(str));
		int j = 2147483647;
		System.out.println("j的值" + (j + 1));// -2147483648
		int j2 = -2147483648;
		System.out.println("j的值" + (j2 - 1));// 2147483647
	}

}

```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上河雨滴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值