随笔|选出字符串中连续出现的数字当中的最大数

选出字符串中连续出现的数字当中的最大数 其实这是一道面试题,具体要求如下:
*给定一个字符串,返回该字符串中连续出现的数字当中最大的一个,例如给定 "5ds45%^d2&c544d1" 则返回 544。如果连续出现的数字超过了 int 的取值范围,则返回 int 的最大值或者最小值,不能使用 long 类型及其包装类。
ok,先说说思路:

  1. 去除字符串收尾两端的空格;
  2. 将非数字部分替换成" ",也就是空字符串;
  3. 用空字符串进行切割,返回数字部分,用TreeSet接收,因为TreeSet有自动排序的功能,返回TreeSet的最后一个元素。
你以为这样就完了吗?当然不是啦,注意捕获异常!!!
当然这只是我的一种思路,牛逼的完全可以用正则表达式搞定,或者分类讨论判断字符串连续出现数字,但是要注意数组下标越界问题。总而言之,仁者见仁智者见智!
ok, 直接上代码:
package com.czj.demo; import java.util.TreeSet; /** * @Author: czj * @Date: 2019/1/27 */ public class Question {public static int getInt(String str) { //去掉首尾两端空格 String trim = str.trim(); //遍历 替换掉字符串中非数字部分字符 StringBuilder sb = new StringBuilder(); for (char c : trim.toCharArray()) { //注意保留负数 if (Character.isDigit(c)) { sb.append(c); } else if (c == '-') { sb.append(" -"); } else { sb.append(" "); } } //空字符串进行切割去掉不是连续数字部分 String[] intStr = sb.toString().split(" "); TreeSet set = new TreeSet(); for (String s : intStr) { if (s.length() > 0) { //如果超出取值范围,则进行捕获 try { set.add(Integer.valueOf(s)); } catch (NumberFormatException e) { //正负数都可能异常,分类讨论 if (s.startsWith("-")) { set.add(Integer.MIN_VALUE); } else { set.add(Integer.MAX_VALUE); } } } } //因为TreeSet会自动排序,直接返回最后一个元素即可 return set.last(); }}

【随笔|选出字符串中连续出现的数字当中的最大数】经过测试没有问题~

    推荐阅读