首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

在字符串中找到连续最长的数字串

2013-06-19 
在字符串中找出连续最长的数字串题目描述在字符串中找出连续最长的数字串,并把这个串的长度返回;如果长度

在字符串中找出连续最长的数字串
题目描述

在字符串中找出连续最长的数字串,并把这个串的长度返回;如果长度相同,返回最后一个连续字符串

样例输入
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);
    }

热点排行