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
}
}
```