在字符串中出连续最长的数字串
输⼊描述:
字符串长度17模式串长度输⼊⼀个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度。
输⼊例⼦:
abcd12345ed125ss123058789,如果有重复的最⼤长度的数字串,则⼀起输出,如1456jk4789,输出14564789,4
输出例⼦:
123058789,9
思路:先把字符串中的数字串取出来,然后取出长度最⼤的数字字串并输出,刚开始我使⽤HashMap的key存储数字字串,value存字串长度,考虑到HashMap存储⽆序,故改为LInkedHashMap,然后根据Ma
p的value值先上有缺陷代码:
1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.Iterator;
5import java.util.LinkedHashMap;
6import java.util.List;
7import java.util.Map;
8import java.util.Map.Entry;
9import java.util.Scanner;
10import java.util.Set;
11
12public class Test10 {
13
14public static void main(String[] args) {
15        Scanner sc = new Scanner(System.in);
16while (sc.hasNext()) {
17            String s = sc.next();
18            Map<String,Integer> mp = new LinkedHashMap<String,Integer>();//使⽤Linked哈希保证元素的有序性
19            String s1 = s.replaceAll("[a-z]", " ");//把字符串中的字母全部替换为空格
20            String[] str = s1.split(" ");//以空格分割字符串
21for (int i = 0; i < str.length; i++) {//把字符串中连续的数字串存⾄map中,其中key为数字串,value为数字串长度
22if (str[i].length() != 0) {//由于有连续空格,使⽤空格分割时会出现多个空⼦串,空⼦串不予考虑,故有此判断
23if (str[i].charAt(0) != ' ') {
24                        mp.put(str[i], str[i].length());
25                    }
26                }
27            }
28//System.out.println(mp);
29//System.out.println("-------");
30
31            List<Map.Entry<String, Integer>> li = new ArrayList<Map.Entry<String,Integer>>();//⽤来存储Map.Entry<String, Integer>类型
32            Set<Entry<String, Integer>>se = mp.entrySet();//获得map的Map.Entry<String, Integer>类型
33            Iterator<Entry<String, Integer>> it = se.iterator();
34while(it.hasNext()){//把Map.Entry<String, Integer>类型元素存⼊list中,以便排序
35                Entry<String, Integer> en = it.next();
36                li.add(en);
37//System.out.println(en);
38            }
39//System.out.println("-------");
40            Collections.sort(li, new Comparator<Entry<String, Integer>>() {//使⽤Collections集合⼯具类对list中Entry类型元素按照value进⾏⾃然升序排序
41
42                @Override
43public int compare(Entry<String, Integer> o1,
44                        Entry<String, Integer> o2) {
45// TODO Auto-generated method stub
Value()Value());
47                }
48            });
49
50//Iterator<Entry<String, Integer>> it1 = se.iterator();
51//while(it1.hasNext()){
52//System.out.());
53//            }
54//System.out.println("-------");
55
56
57            StringBuffer sb = new StringBuffer();//⽤来存储长度最⼤且相等的数字串
58for(int i=0;i<li.size();i++){
(li.size()-1).getValue()==li.get(i).getValue()){
60                    sb.append(String.(i).getKey()));
61                }
62            }
63            System.out.println(sb+","+li.get(li.size()-1).getValue());
64        }
65    }
66 }
上⾯代码如果输⼊时1234hj1234,则不会输出正确结果12341234,4 ,会输出1234,4,下⾯使⽤list
1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5import java.util.Scanner;
6
7public class Test11 {
8
9public static void main(String[] args) {
10        Scanner sc = new Scanner(System.in);
11while (sc.hasNext()) {
12            String s = sc.next();
13            List<String> li = new ArrayList<String>();
14            String s1 = s.replaceAll("[a-z]", " ");// 把字符串中的字母全部替换为空格
15            String[] str = s1.split(" ");// 以空格分割字符串
16for (int i = 0; i < str.length; i++) {// 把字符串中连续的数字串存⾄map中,其中key为数字串,value为数字串长度
17if (str[i].length() != 0) {// 由于有连续空格,使⽤空格分割时会出现多个空⼦串,空⼦串不予考虑,故有此判断
18if (str[i].charAt(0) != ' ') {
19                        li.add(str[i]);
20                    }
21                }
22            }
23
24            Collections.sort(li, new Comparator<String>() {
25
26                @Override
27public int compare(String o1, String o2) {//这⾥根据list中的字符串元素长度⼤⼩进⾏⾃然排序28// TODO Auto-generated method stub
29return Integer.valueOf(o1.length())pareTo(
30                            Integer.valueOf(o2.length()));
31                }
32            });
33            StringBuffer sb = new StringBuffer();//⽤来存储长度最⼤且相等的数字串
34for (int i = 0; i < li.size(); i++) {
35if (li.get(i).length() == li.get(li.size() - 1).length()) {
36                    sb.(i));
37                }
38            }
39
40            System.out.println(sb + "," + li.get(li.size() - 1).length());
41        }
42    }
43 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。