随笔|选出字符串中连续出现的数字当中的最大数
选出字符串中连续出现的数字当中的最大数 其实这是一道面试题,具体要求如下:
*给定一个字符串,返回该字符串中连续出现的数字当中最大的一个,例如给定 "5ds45%^d2&c544d1" 则返回 544。如果连续出现的数字超过了 int 的取值范围,则返回 int 的最大值或者最小值,不能使用 long 类型及其包装类。
ok,先说说思路:
- 去除字符串收尾两端的空格;
- 将非数字部分替换成" ",也就是空字符串;
- 用空字符串进行切割,返回数字部分,用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();
}}
【随笔|选出字符串中连续出现的数字当中的最大数】经过测试没有问题~
推荐阅读
- 生活随笔|好天气下的意外之喜
- 一起来学习C语言的字符串转换函数
- 25篇中考随笔
- 字符串拼接成段落,换行符(\n)如何只执行n-1次
- 随笔|随笔|蚂蚁的小船
- 随笔一篇
- 营养基础学20180331(课间随笔)??
- 医生随笔(232)不要轻易得罪底层人
- 随笔(二)
- C语言的版本比较