I m reading an array from a text file, then i should capitalize, count ocurrences of each name to then display all the info
我需要能够要求用户输入文件名,然后显示格式化的名称。
编写一个Java程序,从文本文件中读取一系列名称(名字后面跟着姓氏,由至少一个空间分隔),并且:
显示按升序从输入文件中读取的名称列表(姓氏后接逗号,后接空格,后接名字)。每个名字和姓氏必须大写(大写的第一个字母和小写的其余字母)。名字和姓氏必须按照下面的示例排列。
对于文件中的每个名字,显示名字在文件中出现的次数。(即名字:count)。名字列表必须按名字的升序显示。每个名字必须大写(大写的第一个字母和小写的其余字母),并且只显示一次。名字和计数必须按照下面的示例排列。
对于文件中的每个姓氏,显示姓氏在文件中出现的次数。(即姓氏:count)。此姓氏列表必须按姓氏的升序显示。每个姓氏必须大写(大写的第一个字母和小写的其余字母),并且只显示一次。姓氏必须按照下面的示例排列。
对于文件中的每个名称,(姓氏后接逗号,后接空格,后接名字)显示名称在文件中出现的次数。(即姓名:count)。此名称列表必须按名称的升序显示。所有名字和姓氏必须大写。每个名称只能显示一次。名字、姓氏和计数必须按照下面的示例排列。
按升序显示唯一名称列表(姓氏后跟逗号,后跟一个或多个空格,后跟名字)。名字和姓氏必须按照下面的示例排列。
按升序将唯一名称列表(姓氏后跟逗号,后跟一个或多个空格,后跟名字)写入文本文件。名字和姓氏排成一行,类似于项目5中的显示。
程序必须要求用户提供输入和输出文件的名称。
输出应为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | Enter the name of the input file input.txt ******* All Names ********* Beres, Kirsten Beres, Kirsten Beumer, Gretta Hutt, Colette Hutt, Shawanda Jones, Colette Jones, Marcia Koenig, Gerri Means, Tijuana Montilla, Adriana Montilla, Adriana Montilla, Adriana Montilla, Adriana Mossman, Emmanuel Sapienza, Colette Sapienza, Colette Shover, Neva Stanfill, Marcia ******* First Names count********* Adriana 4 Colette 4 Emmanuel 1 Gerri 1 Gretta 1 Kirsten 2 Marcia 2 Neva 1 Shawanda 1 Tijuana 1 ******* Last Names count ********* Beres 2 Beumer 1 Hutt 2 Jones 2 Koenig 1 Means 1 Montilla 4 Mossman 1 Sapienza 2 Shover 1 Stanfill 1 ******* All Names count********* Beres, Kirsten 2 Beumer, Gretta 1 Hutt, Colette 1 Hutt, Shawanda 1 Jones, Colette 1 Jones, Marcia 1 Koenig, Gerri 1 Means, Tijuana 1 Montilla, Adriana 4 Mossman, Emmanuel 1 Sapienza, Colette 2 Shover, Neva 1 Stanfill, Marcia 1 ******* All Unique Names ********* Beres, Kirsten Beumer, Gretta Hutt, Colette Hutt, Shawanda Jones, Colette Jones, Marcia Koenig, Gerri Means, Tijuana Montilla, Adriana Mossman, Emmanuel Sapienza, Colette Shover, Neva Stanfill, Marcia Enter the name of the output file output.txt |
这是我迄今为止所拥有的,但我感到迷茫,找不到一种资本化和计数的方法。我试过几件事,但似乎什么也没用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | public static void getNames(ArrayList<String> fn, ArrayList<String> ln) throws IOException { Scanner kb = new Scanner(System.in); System.out.print("What is the name input file?"); String fileName = kb.next(); File inpFile = new File(fileName); Scanner in = new Scanner(inpFile); while (in.hasNext()) { String firstName = in.next(); String lastName = in.next(); fn.add(firstName); ln.add(lastName); } } public static void display(ArrayList<String> names) { for (int i = 0; i < names.size(); i++) { System.out.println(names.get(i)); } } public static void capitalize(ArrayList<String> firstName) { for (int i = 0; i < firstName.size(); i++) { firstName.set(i; toCapital(firstName.get(i))); } } /* * public static void capitalize(ArrayList<String> names) { * for (int i = 0; i < names.size(); i++){ * names.set(i,toCapital(names.get(i))); * } * } */ //public static String toCapital (String name){ //String.toUpperCase(name.charAt(0)) + //String.toLowerCase(name.substring(1)); //return j; //} public static void main(String[] args) throws IOException { // TODO code application logic here ArrayList<String> first = new ArrayList<>(); ArrayList<String> last = new ArrayList<>(); getNames(first, last); //display(first); //display(last); ArrayList<String> allNames = new ArrayList<>(); for (int i = 0; i < first.size(); i++) { allNames.add(last.get(i) +"," + first.get(i)); } display(allNames); } |
号
这是输入文件的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | colette Sapienza gretta Beumer EMManuel Mossman Colette Sapienza marcia Jones Shawanda Hutt Adriana monTILla adriana montilla Adriana Montilla Colette Jones Colette Hutt Marcia Stanfill NeVa shover tijuana Means Adriana Montilla gerri KoeNig Kirsten beres Kirsten Beres |
您可以使用
1 2 3 4 5 6 7 8 9 10 11 | HashMap<String, Integer> firstNameCountMap = new HashMap<String, Integer>(); for (String firstName : first) { if (firstNameCountMap.containsKey(firstName)) firstNameCountMap.put(firstName, firstNameCountMap.get(firstName)++); else firstNameCountMap.put(firstName, 0); } System.out.println("******* First Names count*********"); for (String firstName : firstNameCountMap.keySet()) { System.out.println(firstName +"" + firstNameCountMap.get(firstName)); } |
然后对姓氏和所有名字重复。要将字符串中的第一个字符大写,请参见此处,但基本上:
1 |
号
编辑
由于需要将此功能放入预定义的方法
1 2 3 4 5 6 7 8 |
并将名称集合编辑为大写版本:
1 2 3 4 5 6 | public static void capitalize(ArrayList<String> names) { for (int i=0; i<names.size(); i++) { String capitalizedName = names.get(i).substring(0, 1).toUpperCase() + names.get(i).substring(1); names.set(i, capitalizedName); } } |
。