yilisha_andrea
2015-10-29 05:06
采纳率: 37.5%
浏览 8.0k
已采纳

Java中如何截取字符串数组中一段数字按大小进行排序,再输出整个排序后的字符串?

String[] meg ={"1#zhang#3207237”,"2#Wang#3207232“。。。}根据最后的数字大小排序后输出

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

11条回答 默认 最新

  • cxlovu 2015-10-29 09:20
    已采纳

    帮助lz实现了一下,望采纳

     import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    
    
    public class test {
    
        public static void main(String[] arg0){
    
            String[] Info = {"1#zhang#3207237","2#Wang#3207232"};
            Map<String, Integer> myMap = new LinkedHashMap(); 
            fillMap(myMap, Info);
            myMap = sortMap(myMap);  
            printMap(myMap);
        }
    
        public static void fillMap(Map<String, Integer> myMap, String[] Info){
    
            int i, j;
            for(i = 0; i < Info.length; i++){
                for(j = Info[i].length() - 1; j >= 0; j--){
                    if(Info[i].charAt(j) == '#') break;
                }
                int numLen = Info[i].length() - j;
                String strNum = Info[i].substring(
                        Info[i].length() - numLen + 1, Info[i].length());
                Integer num = Integer.valueOf(strNum);
            //  System.out.println(num);
                myMap.put(Info[i], num);
            }
        }
    
        private static void printMap(Map map){  
    
            Iterator it = map.entrySet().iterator();  
            while(it.hasNext()){  
                Map.Entry entry = (Map.Entry) it.next();  
                System.out.println(entry.getKey());  
            }   
        }   
    
        public static Map sortMap(Map oldMap) {  
            ArrayList<Map.Entry<String, Integer>> list = 
                    new ArrayList<Map.Entry<String, Integer>>(oldMap.entrySet());  
            Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
    
    
                public int compare(Entry<java.lang.String, Integer> arg0,  
                        Entry<java.lang.String, Integer> arg1) {  
                    return arg0.getValue() - arg1.getValue();  
                }  
            });  
            Map newMap = new LinkedHashMap();  
            for (int i = 0; i < list.size(); i++) {  
                newMap.put(list.get(i).getKey(), list.get(i).getValue());  
            }  
            return newMap;  
        }  
    }
    
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Frank_Shieh 2015-10-29 05:12

    利用正则表达式(或者利用ASCII码去判断是否为数字)去截取数字,然后拿到数字后稍微排序一下就可以了。

    评论
    解决 无用
    打赏 举报
  • Frank_Shieh 2015-10-29 05:13

    利用正则表达式(或者利用ASCII码去判断是否为数字)去截取数字,然后拿到数字后稍微排序一下就可以了。

    评论
    解决 无用
    打赏 举报
  • Frank_Shieh 2015-10-29 05:31

    输出原数组?你的意思是要把数字都排好序放前面,然后后面放字符?类似于这样:"77332210#zhang#”?

    评论
    解决 无用
    打赏 举报
  • 逝_去_的_光_阴 2015-10-29 05:33

    新建一个Map集合 将截取的数字作为Map的key 原来的字符串作为Map的value
    排序之后,通过key就可以输出对应的value了
    (数字必须不同,否则这方法无效)

    评论
    解决 无用
    打赏 举报
  • 人_生而伟大 2015-10-29 05:41

    看规律,这个串类似于json,按,分割,将分割后的每一段都封装成一个对象就好了

    评论
    解决 无用
    打赏 举报
  • 人_生而伟大 2015-10-29 05:41

    看规律,这个串类似于json,按,分割,将分割后的每一段都封装成一个对象就好了

    评论
    解决 无用
    打赏 举报
  • Rocket-Snail 2015-10-29 13:43

    利用正则表达式解决。这里只实现将其中的数字给解析出来。
    public class Ceshi {
    public static void main(String[] args){
    String[] msg = {"1#zhang#3207237","2#Wang#3207232"};
    for(String str:msg){
    String[] msgtmp = str.split("\D+");
    for(String str1:msgtmp){
    System.out.println(str1);
    }
    }
    }
    }

    评论
    解决 无用
    打赏 举报
  • JonsonJiao 2015-10-31 08:36

    楼上已经有具体的解决方案了。就不多说了,因为你这个有特殊的符号能够分割,比如根据最后一个#号找到index就可以拿到后面的数字了。

    评论
    解决 无用
    打赏 举报
  • JonsonJiao 2015-10-31 08:40

    楼上有同学给出具体代码了,修改一个地方好了,截取最后的数字串,Info[i].split(Info[i].lastIndexOf("#")+1)

    评论
    解决 无用
    打赏 举报
  • yilisha_andrea 2015-10-31 13:13

    谢谢大家了,之前的题目通过split取出放在数组,两个数组排序。由于本人知道的很少只能运用简单的方法,谢谢大家给出的多种建议,以及写出的代码。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题