返回字符串的最长数字串,需要定义两个长度,分别是最大数字串长度和当前最新数字串长度,还需要定义两个buffer缓存,分别是最大数字串缓存和当前最新数字串缓存,如果字符数组有一个字符不是数字,则重置当前最大数字串长度和当前最新数字串缓存,否则接着判断最大数字串长度和当前最新数字串长度哪个大,如果大,需要交换位置,这里没有考虑如果数字串长度相同的。实现过程如下所示:
package structs.string;
/**
* @author jcm
*
* 时间 2016年8月27日
*/
public class OutPutMaxNumFromString {
public static void main(String[] args) {
StringBuffer buffer = outPutMaxNumFromString("275565737364567537hudfioa14654227775357573736456gshqio46476466464646hai46687das");
System.out.println(buffer.toString());
}
/**
* @author jcm
* @see 求字符串最大数字串
* @param str
* @return StringBuffer
*/
public static StringBuffer outPutMaxNumFromString(String str){
if(str == null)
return null;
//最大字符串长度,是要和当前最新数字串长度作比较的,如果小于当前最新字符串长度,则交换
int maxLength = 0;
//实时接收当前最新数字串的长度
int currentLength =0;
//最长数字串,是要返回的缓存
StringBuffer maxBuffer = new StringBuffer();
//实时接收当前最新数字串,如果if条件不满足数字串,又会被清理掉,重置null
StringBuffer currentBuffer = new StringBuffer();
char[] ch = str.toCharArray();
int length = ch.length;
for(int i=0;i<length;i++){
//如果该字符是数字
if(ch[i]<= '9' && ch[i]>='0'){
if(currentLength == 0){
//由于缓存被赋值null,所以要重新实例化
currentBuffer = new StringBuffer();
currentBuffer.append(ch[i]);
currentLength++;
}else{
currentBuffer.append(ch[i]);
currentLength++;
if(currentLength>=maxLength){
maxLength = currentLength;
maxBuffer = currentBuffer;
}
}
}else{
//重置实时最新字符长度和缓存
currentLength = 0;
currentBuffer = null;
}
}
return maxBuffer;
}
}
输出结果是:14654227775357573736456