在Java中的ArrayLists输出中使用Nameize Name

问题描述 投票:1回答:3

我相对新鲜(几周)进入Java,我正在使用ArrayLists来处理Employee输入系统。无论如何,我想确保无论用户输入输出中的名称是否是相同的格式。

例:

输入 - >输入员工姓名:SAMANTHA

输出 - >员工姓名:萨曼莎

这是我正在运行的代码,我只是不确定在哪里我可以设置格式。

import java.util.ArrayList;
import java.util.Scanner;
public class EmployeeTester_v5
{
   public static void main (String[] args)
   {

//ASSIGN VARIABLES

      String c = "";
      String newEmployee = "";
      double yearToDate = 0.0;
      double increase = 0.025;
      double newSalary = 0.0;


//ARRAY LISTS 

      ArrayList<String>first = new ArrayList<String>();
      ArrayList<String>last = new ArrayList<String>();
      ArrayList<Double>salary = new ArrayList<Double>();
      ArrayList<Integer>months = new ArrayList<Integer>();

//SCANNER INPUT

      //create a new scanner
      Scanner input = new Scanner(System.in);


//WHILE LOOP - to keep asking for user input until "No" is entered

      do{

          //USER INPUT
            System.out.println ("Enter employee first name: ");
            first.add(input.next());

            System.out.println ("Enter employee last name: ");
            last.add(input.next());

            System.out.println ("Enter employee salary: ");
            salary.add(input.nextDouble());

            System.out.println ("Number of months worked this year: ");
            months.add(input.nextInt());

            System.out.println("Enter another employee in the system?");
            c = input.next();


        }while(c.equalsIgnoreCase("Yes"));
            System.out.println();


//ARRAY OUTPUT

             for(int i=0; i < first.size(); i++)
                 {
                 yearToDate = months.get(i) * salary.get(i)/12;
                 newSalary = (increase * salary.get(i)) + salary.get(i);

                 System.out.print("Employee Name: " + first.get(i) + " ");
                 System.out.print(last.get(i)+"\n");
                 System.out.printf("Current Salary: $%.2f\n", salary.get(i));
                 System.out.printf("Year to Date: $%.2f\n", yearToDate);
                 System.out.printf("New Salary: $%.2f\n", newSalary);



                 System.out.println("----------------------");
                 }

    }

}
java arrays arraylist string-formatting
3个回答
4
投票

你应该做的第一件事是检查字符串API https://docs.oracle.com/javase/8/docs/api/java/lang/String.html 对于Java来说,这是必须知道的,你可能需要它在你可能正在处理的每个项目中:)

有很多方法可以实现您的目标。 你可以做的例如是将第一个字母大写,然后将你强制要小写的其余字符串附加到小写 - 请查看下面的代码段。

String inputString = input.next();
String resultString = inputString.substring(0, 1).toUpperCase() + inputString.substring(1).toLowerCase();

1
投票

试试这样:

System.out.print("Employee Name: " + first.get(i).substring(0,1).toUpperCase()+first.get(i).substring(1).toLowerCase() + " ");

这个first.get(i).substring(0,1).toUpperCase()用字符串upper表示你的第一个字母,first.get(i).substring(1).toLowerCase()从索引1获取字母 - 所以从字符串的第二个字母到更低。


0
投票

也许OP不理解的是,这可以用私有方法包装,如下所示:

private String fixCapitalisation(String input) {

return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
}

然后你的行通过调整打印名称的行来使用它:

System.out.print("Employee Name: " + fixCapitalisation(first.get(i)) + " ");

然后你可以在姓氏上重用这个功能......

这是改变的整个班级:

package Dunno;
import java.util.ArrayList;
import java.util.Scanner;
public class EmployeeTester_v5
{
   public static void main (String[] args)
   {

//ASSIGN VARIABLES

      String c = "";
      String newEmployee = "";
      double yearToDate = 0.0;
      double increase = 0.025;
      double newSalary = 0.0;


//ARRAY LISTS 

      ArrayList<String>first = new ArrayList<String>();
      ArrayList<String>last = new ArrayList<String>();
      ArrayList<Double>salary = new ArrayList<Double>();
      ArrayList<Integer>months = new ArrayList<Integer>();

//SCANNER INPUT

      //create a new scanner
      Scanner input = new Scanner(System.in);


//WHILE LOOP - to keep asking for user input until "No" is entered

      do{

          //USER INPUT
            System.out.println ("Enter employee first name: ");
            first.add(input.next());

            System.out.println ("Enter employee last name: ");
            last.add(input.next());

            System.out.println ("Enter employee salary: ");
            salary.add(input.nextDouble());

            System.out.println ("Number of months worked this year: ");
            months.add(input.nextInt());

            System.out.println("Enter another employee in the system?");
            c = input.next();


        }while(c.equalsIgnoreCase("Yes"));
            System.out.println();


//ARRAY OUTPUT

             for(int i=0; i < first.size(); i++)
                 {
                 yearToDate = months.get(i) * salary.get(i)/12;
                 newSalary = (increase * salary.get(i)) + salary.get(i);

                 System.out.print("Employee Name: " + fixCapitalisation(first.get(i)) + " ");
                 System.out.print(last.get(i)+"\n");
                 System.out.printf("Current Salary: $%.2f\n", salary.get(i));
                 System.out.printf("Year to Date: $%.2f\n", yearToDate);
                 System.out.printf("New Salary: $%.2f\n", newSalary);



                 System.out.println("----------------------");
                 }

    }

   //New Method to fix capitalisation
   private static String fixCapitalisation(String input) {

     return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
     }

我希望我的回答可以帮助你理解已经给出的更好的答案,以及我提供的重复答案是如何相关的 - 这里使用ArrayList对String操作没有任何影响。

您应该考虑定义自己的“Employee”类,它可以保留名称,工资等,然后您只需要一个ArrayList,您当前的列表中的值按逻辑方式链接在Array中的位置,但是没有技术依赖于此。

© www.soinside.com 2019 - 2024. All rights reserved.