Java 在android studio中,将中的字符串转换为整数(也称为5)

Java 在android studio中,将中的字符串转换为整数(也称为5),java,Java,如何简单地将包含一个月变量的字符串转换为整数值 我可以像下面这样做,但似乎应该有一个更有效的方法来做到这一点 整月整; 开关(月){//3个字母字符串输入 案例“1月”:月整=1;中断; 案例“2月”:月份=2;中断; 案例“Mar”:月份=3;中断; 案例“Apr”:月份=4;中断; 案例“五月”:月整=5;休息; 案例“Jun”:月整=6;中断; 案例“Jul”:月份=7;中断; 案例“Sep”:月份=9;中断; 案例“10月”:月数=10;中断; 案例“11月”:11个月;中断; 案例“

如何简单地将包含一个月变量的字符串转换为整数值

我可以像下面这样做,但似乎应该有一个更有效的方法来做到这一点


整月整;
开关(月){//3个字母字符串输入
案例“1月”:月整=1;中断;
案例“2月”:月份=2;中断;
案例“Mar”:月份=3;中断;
案例“Apr”:月份=4;中断;
案例“五月”:月整=5;休息;
案例“Jun”:月整=6;中断;
案例“Jul”:月份=7;中断;
案例“Sep”:月份=9;中断;
案例“10月”:月数=10;中断;
案例“11月”:11个月;中断;
案例“12月”:月数=12;中断;
默认值:month_int=0;break;//错误
}
返回月份;

我的输入是一个三个字母的字符串,需要将其转换为int.Aka 1-12。

您可以创建一个字符串到月份值的映射,其中字符串是您要查找的键,月份是该键的相对月份

Map monthsByDisplay=Stream.of(Month.values())
.collect(Collectors.toMap(m->m.getDisplayName(TextStyle.SHORT,Locale.ENGLISH),Function.identity());
Month-Month=monthsByDisplay.get(“一月”);
如果(月==null){
抛出新的IllegalStateException(“意外的日期键”);
}
int monthValue=month.getValue();

您应该使用java.time.Month Enum(请参阅javadoc)。方法
getValue()
将为您提供月份1-12的数值如果传入格式为,请使用该方法

private static final DateTimeFormatter MONTH_FORMAT = DateTimeFormatter.ofPattern("MMM", Locale.ENGLISH); // supports Jan, Feb etc
MONTH_FORMAT.parse("Feb").get(ChronoField.MONTH_OF_YEAR); // 2
Month month = Month.from(MONTH_FORMAT.parse("Feb")); // java.time.Month.FEBRUARY

获取月数(2)很容易,但获取
月数可能更好,因为这会鼓励您继续使用java.time API解决日历问题!

如何:case“Jan”…你已经有了你想要的,你还需要什么?那是
字符串
小写还是大写,还是仅仅是第一个字母大写?涉及
java.time.Month
?这个代码片段的目的是什么?这是一个完整的方法吗?你在哪里使用它?为什么使用它?我打赌你永远不会得到
4
返回的结果当你有一个
案例“Arp”
在此
开关中
…@ADM是的,但我已经在使用日历库并使用sdf,但无法更改数据,因为这就是我接收数据的方式。除非有办法使用日历格式从一种格式转换为另一种格式。您是以某种完整格式接收日期?ISO?还是只有月份?Pl请考虑使用<代码> java。时间<代码>代替过时的代码> java .UTL.Calual< <代码> >代码> java .Text。SimuleDealFrase。这看起来是一个原则上合理的答案(如果你的输入是ISO MMM的)。但是这里的区域起着至关重要的作用。试图识别“FEB”可能失败。(它可以用西班牙语和英语工作,但不能用法语,显然也不能用任何非拉丁语)。你应该检查例外情况。是的,@GPI是对的……只需将
Locale
添加到模式的
调用中,这将是最好的回答imho.Do
DateTimeFormatter.ofPattern(“MMM”,Locale.english)
…更新,谢谢-我确实考虑过语言环境,但跳过了!