您好,我是使用Java的新手 我只需要一些建议即可。
这是我需要做的: 用户输入日期8/15/2018,控制台应显示:“你好!这是我们的Lord 2018年八月的第15天。”
这是我的代码
package newdate;
import java.util.Scanner;
public class NewDate {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter the date in mm/dd/yyyy: ");
String str=sc.next();
switch (str) {
case 1: str.substring(0,2) = "January";
break;
case 2: str.substring(0,2) = "February";
break;
case 3: str.substring(0,2) = "March";
break;
case 4: str.substring(0,2) = "April";
break;
case 5: str.substring(0,2) = "May";
break;
case 6: str.substring(0,2) = "June";
break;
case 7: str.substring(0,2) = "July";
break;
case 8: str.substring(0,2) = "August";
break;
case 9: str.substring(0,2) = "September";
break;
case 10: str.substring(0,2) = "October";
break;
case 11: str.substring(0,2) = "November";
break;
case 12: str.substring(0,2) = "December";
break;
default: str.substring(0,2) = "Invalid month";
break;
}
System.out.println("Hello! This is day " + str.substring(3,5) +" of the month of " + str.substring(0,2) +" in the year of our Lord" + str.substring(6,10));
}
}
问题是数据类型,我希望将数字替换为字符串(月) 例如:11 = 11月
我该怎么办?
答案 0 :(得分:2)
首先,对于现实世界的编程,将使用标准库中的LocalDate
来保存日期,并使用DateTimeFormatter
来解析用户在LocalDate
中输入的日期。请参阅底部的链接。
从根本上讲,对于您的代码,您需要一个单独的String
变量来表示月份名称。您不能将其分配回已有的字符串中。只需声明String monthName;
,然后在您的switch
开头为其分配适当的值即可。
另外,当str
是字符串并且1是int
时,您将无法打开str
并将1用作大小写标签。简单的解决方法是打开str.substring(0,2)
(月份数字作为字符串),并使用"01"
,"02"
等作为大小写标签。另一个常见的解决方案是将月份号解析为int
(请参见下面的另一个链接或搜索操作方法),然后按原样保留案例标签1、2等。>
链接
答案 1 :(得分:1)
您好,亲爱的初级开发人员:) 我的建议是: 首先为月份名称定义一个枚举:
enum MonthName{
January(0),
February(1),
March(2),
April(3),
May(4),
June(5),
July(6),
August(7),
September(8),
October(9),
November(10),
December(11);
private int number;
MonthName(int number){
this.number=number;
}
public static String findName(int number){
for(MonthName monthName:MonthName.values()){
if(monthName.number==number){
return monthName.name();
}
}
throw new RuntimeException("Invalid Month!");
}
}
然后为您想要的格式定义一个类:
class MyDateFormat{
private int day;
private String month;
private int year;
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
并最终创建一种用于分隔输入字符串的方法(2018年8月15日):
public MyDateFormat getFormatedDate(String dateString) throws ParseException {
SimpleDateFormat dateFormat=new SimpleDateFormat("MM/dd/yyyy");
Date date = dateFormat.parse(dateString);
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
MyDateFormat myDateFormat=new MyDateFormat();
myDateFormat.setDay(calendar.get(Calendar.DAY_OF_MONTH));
myDateFormat.setMonth(MonthName.findName(calendar.get(Calendar.MONTH)));
myDateFormat.setYear(calendar.get(Calendar.YEAR));
return myDateFormat;
}
祝你好运:)
答案 2 :(得分:0)
请尝试这个。
try {
String str ="8/15/2018";
Date date=new SimpleDateFormat("MM/dd/yyyy").parse(str);
System.out.println("Hello! This is day " + new SimpleDateFormat("dd").format(date) +" of the month of " + new SimpleDateFormat("MMMM").format(date) +" in the year of our Lord " + new SimpleDateFormat("yyyy").format(date));
} catch (ParseException e) {
e.printStackTrace();
}