在字符串中找出连续最长的数字串
题目描述
在字符串中找出连续最长的数字串,并把这个串的长度返回;如果长度相同,返回最后一个连续字符串
样例输入
abcd12345ed125ss123456789
abcd12345ss54321
样例输出
输出123456789,函数返回值9
输出54321,函数返回值5
函数原型:
int Continumax(String intputStr, StringBuffer outputStr)
输入参数:
String intputStr 输入字符串
输出参数:
StringBuffer outputStr 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串
返回值:
int 连续最长的数字串的长度
[解决办法]
我改进了一下你在试试
public static int Continumax(String intputStr, StringBuffer outputStr) {
char[] charArray = intputStr.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < charArray.length; i++) {
if (Character.isDigit(charArray[i])) {
sb.append(charArray[i]);
} else {
sb.append(",");
}
}
String[] digitArray = sb.toString().replaceAll("(,)+", ",").split(",");//得到数字数组
if (digitArray.length <= 1) {
System.out.println("没有数字串!");
return 0;
}
List<String> digitList = new ArrayList<String>(Arrays.asList(digitArray));//转化为list方便操作
List<String> positiveDigitList = fetchContinueDigitByPositiveSort(digitList, true);//得到正向连续的数字比如1234,345
List<String> backDigitList = fetchContinueDigitByPositiveSort(digitList, false);//得到反向连续的数字比如4321,765
List<String> lastList = new ArrayList<String>();
lastList.addAll(positiveDigitList);
lastList.addAll(backDigitList);
int maxLength = 0;
String maxValue = "";
List<String> endStrList = new ArrayList<String>();
for (String s : lastList) { //找出最长并且是最后一个的值和长度
if (s.length() > maxLength) {
maxLength = s.length();
}
}
for (String s : lastList) { //找出最长并且是最后一个的值和长度
if (s.length() == maxLength) {
endStrList.add(s);
}
}
int startIndex = 0;
for (String s : endStrList) {
if (intputStr.lastIndexOf(s) >= startIndex) {
startIndex = intputStr.lastIndexOf(s);
maxValue = s;
maxLength = s.length();
}
}
System.out.println("最大连续数字串为:" + maxValue);
System.out.println("其长度为:" + maxLength);
return maxLength;
}
private static List<String> fetchContinueDigitByPositiveSort(List<String> digitList, boolean isPositive) {
List<String> lastDigitList = new ArrayList<String>();
for (String s : digitList) {
if (s.equals("")) {
continue;
}
char[] charArray = s.toCharArray();
int start = Integer.parseInt(String.valueOf(charArray[0]));
int begin = Integer.parseInt(String.valueOf(charArray[0]));
int startIndex = 0;
if (charArray.length == 1) {
lastDigitList.add(String.valueOf(start));
return lastDigitList;
}
for (int j = 1; j < charArray.length; j++) {
if (isPositive) {
if (begin + 1 == Integer.parseInt(String.valueOf(charArray[j])) && j != charArray.length - 1) {
begin = begin + 1;
continue;
}
} else {
if (begin - 1 == Integer.parseInt(String.valueOf(charArray[j])) && j != charArray.length - 1) {
begin = begin - 1;
continue;
}
}
begin = Integer.parseInt(String.valueOf(charArray[j]));
if (start == begin) {
lastDigitList.add(String.valueOf(start));
} else if (j == charArray.length - 1 && ((isPositive && Integer.parseInt(String.valueOf(charArray[j])) - 1 == Integer.parseInt(String.valueOf(charArray[j - 1])))
[解决办法]
(Integer.parseInt(String.valueOf(charArray[j])) + 1 == Integer.parseInt(String.valueOf(charArray[j - 1]))))) {
lastDigitList.add(String.valueOf(charArray).substring(startIndex, j + 1));
} else {
lastDigitList.add(String.valueOf(charArray).substring(startIndex, j));
if (j == charArray.length - 1) {
lastDigitList.add(String.valueOf(charArray[j]));
}
}
start = begin;
startIndex = j;
}
}
return lastDigitList;
}
public static void main(String[] arg) {
Continumax("54321test123457 ", null);
}