前言:
如今各位老铁们对“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怎么合并字符串中的数字