龙空技术网

57个挑战(python+java)-lesson46

飞霜luke 149

前言:

如今各位老铁们对“java怎么合并字符串中的数字”大概比较关注,朋友们都需要了解一些“java怎么合并字符串中的数字”的相关知识。那么小编在网络上搜集了一些对于“java怎么合并字符串中的数字””的相关文章,希望兄弟们能喜欢,兄弟们一起来了解一下吧!

终于做到了第八章节最后一道题,加鸡腿。

在第八章节里面,学到了从程序中,读写操作文件,下一个章节主要做和外部交互的程序了。

python 版本:

from os import lseek# 关于sort 函数,参考  关于items()函数,Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。参考  字典按照value 排序,由于dict是无序的,所以只能用list去排序,把dict的key和value保存为tuplue对象,参考  WordFrequencyFinder:    content_dict = {}    list1 = []    def openfile(this):        f = open("words.txt")        line = f.readline()        while line:            # print(line)            this.list1 = this.splitstr(line) + this.list1            line = f.readline()        f.close()    def splitstr(this, line):        list1 = line.split()        # print("This is the list1 ------{0}".format(list1))        i = 0        while i < len(list1):            this.content_dict[list1[i]] = 0            i = i + 1        return list1    def process_dic(this):        # 从这里往下         i = 0        while i < len(this.list1):            if this.content_dict.get(this.list1[i]) != None:                this.content_dict[this.list1[i]] = this.content_dict[this.list1[i]] + 1            i = i + 1    def sortvalue(this):        a = sorted(this.content_dict.items(), key=lambda x: x[1], reverse=True)        print(a)        for i in a:            print("{0}:   {1}".format(i[0], i[1] * "*"))lesson46 = WordFrequencyFinder()lesson46.openfile()lesson46.process_dic()print(lesson46.content_dict)print(lesson46.list1)lesson46.sortvalue()

这里面挑战问题,需要做排序,比较麻烦一点,用了sorted() 函数。因为字典默认没有排序的。

运行效果图如下:

java版本

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.ArrayList;/*1.Entry * Map.Entry 是 Map 声明的一个内部接口,此接口为范型,定义为Entry<K,V> * Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。  举例:摘自   System.out.println("通过Map.entrySet遍历key和value");      for (Map.Entry<String, String> entry : map.entrySet()) {       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());      }    2. entrySet()  entrySet是 java中 键-值 对的集合,Set里面的类型是Map.Entry,一般可以通过map.entrySet()得到。  entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V。  用来遍历map的一种方法  举例:  Set<Map.Entry<String, String>> entryseSet=map.entrySet();  for (Map.Entry<String, String> entry:entryseSet) {   System.out.println(entry.getKey()+","+entry.getValue());   } 3. collections.sort() 的用法,参考  Collections是⼀个⼯具类,sort是其中的静态⽅法,是⽤来对List类型进⾏排序的,它有两种参数形式: 1. 直接排序(按照数字比较大小) 2. 对里面的元素排序,要重写comparator 比较的函数。3-1 : 基本排序static List<Integer> intList = Arrays.asList(2, 3, 1);private static void sortBaseTypeByDefaultMode() {    System.out.println("before sort:");    System.out.println(Arrays.toString(intList.toArray()));    System.out.println("=========================");    Collections.sort(intList);    System.out.println("after sort:");    System.out.println(Arrays.toString(intList.toArray()));}public static void main(String[] args) {    leetcode.sortBaseTypeByDefaultMode();}3-2 自定义排序// 定义employ 类public class Emp {    private int empno;    private String ename;    public int getEmpno() {        return empno;    }    public void setEmpno(int empno) {        this.empno = empno;    }    public String getEname() {        return ename;    }    public void setEname(String ename) {        this.ename = ename;    }    public Emp(int empno, String ename) {        super();        this.empno = empno;        this.ename = ename;    }    @Override    public String toString() {        return "empno:\t" + empno + "\tename:\t" + ename;    }}定义泛型违Emp类型的List,使⽤sort⽅法的第⼆种形式:static List<Emp> empList;static {    Emp emp1 = new Emp(2, "Guan YunChang");    Emp emp2 = new Emp(3, "Zhang Fei");    Emp emp3 = new Emp(1, "Liu Bei");    empList = Arrays.asList(emp1, emp2, emp3);}private static void sortEmpByIDefineMode() {    System.out.println("before sort:");    System.out.println(Arrays.toString(empList.toArray()));    System.out.println("=========================");    Collections.sort(empList, new Comparator<Emp>() {        @Override        public int compare(Emp o1, Emp o2) {            //按员⼯编号正序排序/            return o1.getEmpno() - o2.getEmpno();            //按员⼯编号逆序排序/            //return o2.getEmpno()-o1.getEmpno();            //按员⼯姓名正序排序/            //return o1.getEname().compareTo(o2.getEname());            //按员⼯姓名逆序排序/            //return o2.getEname().compareTo(o1.getEname());        }    });    System.out.println("after sort:");    System.out.println(Arrays.toString(empList.toArray()));   } *  */public class WordFrequencyFinder {    String[] list1 = {};    HashMap<String,Integer> content_dic = new HashMap<String,Integer>() ;    void openfile() throws IOException{        File file = new File("full.txt");        FileInputStream fis = new FileInputStream(file);        InputStreamReader isr = new InputStreamReader(fis,"UTF-8");        BufferedReader br = new BufferedReader(isr);        String line;        while((line = br.readLine())!=null)        {            //System.out.println(line);            String[] list2 = line.split(" ") ; // 看到如何在Java 下合并字符串            list1 = MergeArray(list1, list2);        }        for(int i =0; i<list1.length;i++)        {            System.out.println(list1[i]);        }    }    String[] MergeArray(String str1[],String str2[]){        int strLen1 = str1.length;// 保存第一个数组长度        int strLen2 = str2.length;// 保存第二个数组长度        str1 = Arrays.copyOf(str1, strLen1 + strLen2);// 扩容        System.arraycopy(str2, 0, str1, strLen1, strLen2);// 将第二个数组与第一个数组合并        return str1;    }    void splitstr(){        for(int i =0; i < list1.length;i++){            content_dic.put(list1[i],0);        }        System.out.println(this.content_dic.toString()); // debug     }    void process_dic(){        int i = 0 ;        while (i<list1.length)        {            if (this.content_dic.get(list1[i]) != null )            {                int value = this.content_dic.get(list1[i]) + 1;                this.content_dic.put(list1[i],value);            }            i = i + 1;        }        System.out.println(this.content_dic.toString());        System.out.println("Set View"+this.content_dic.entrySet());    }    void sortvalue(){        List<Map.Entry<String,Integer>> list3 = new ArrayList<Map.Entry<String,Integer>>(this.content_dic.entrySet());        Collections.sort(list3,new Comparator<Map.Entry<String,Integer>>() {            @Override            public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2)            {                return -o1.getValue().compareTo(o2.getValue());            }        });        for (Map.Entry<String, Integer> mapping : list3){            //System.out.println(mapping.getKey() + ":" + mapping.getValue());            System.out.println(mapping.getKey() + ":" + String.join("", Collections.nCopies(mapping.getValue(), "*")));        }    }    public static void main(String[] args) throws IOException{        WordFrequencyFinder lesson46 = new WordFrequencyFinder();        lesson46.openfile();        lesson46.splitstr();        lesson46.process_dic();        lesson46.sortvalue();    }}

java 版本流程照抄了python版本,这里用了几个特殊的函数。

Map.Entry<String,Interger> 定义了一个范型,collections.sort() 做了list的排序。

效果图

标签: #java怎么合并字符串中的数字