Java Android:数组索引越界错误
我试图将包含日期的字符串转换为字符数组,然后提取月份并转换它 我使用的是API,服务器以“2015-04-10”的格式提供日期,我试图将其转换为“2015年4月10日”Java Android:数组索引越界错误,java,android,arrays,string,android-studio,Java,Android,Arrays,String,Android Studio,我试图将包含日期的字符串转换为字符数组,然后提取月份并转换它 我使用的是API,服务器以“2015-04-10”的格式提供日期,我试图将其转换为“2015年4月10日” Im以字符串形式存储从服务器接收的日期 我正在将整个字符串转换为一个字符数组 我在这个数组中运行一个循环,并将其分为三个数组: 年,月,日 我分别将这些数组转换为字符串 然后,我将“month”字符串与值进行比较,然后使用if-else条件为其指定月份名称 最后,我按照我想要的顺序添加三个字符串 Android Studio说:
java.lang.ArrayIndexOutOfBoundsException:length=2;索引=5
这是我的代码:('temp'是包含日期的字符串)
//TODO:这里有一种方法,显然可以将电影字符串转换为人类可读的格式。。。。。。小心使用。
char release[]=temp.toCharArray();
Log.d(“Log”,release.toString());
字符日期[]=新字符[2];
字符年[]=新字符[4];
字符月份[]=新字符[2];
对于(int i=0;i<11;i++){
试一试{
如果(i>4&&i<7){
月[i]=发布[i];
}
if(i<4){
年[i]=发布[i];//-->Android Studio说这行有错误。。。
}
如果(i>7&&i<10){
日期[i]=发布[i];
}
}捕获(错误){
错误。printStackTrace();
}
}
字符串monthString=month.toString();
字符串dateString=date.toString();
字符串yearString=year.toString();
字符串finalReleaseDate;
if(monthString.contentEquals(“01”)){
monthString=“一月”;
}else if(monthString.contentEquals(“02”)){
monthString=“二月”;
}else if(monthString.contentEquals(“03”)){
monthString=“三月”;
}else if(月字符串内容等于(“04”)){
monthString=“四月”;
}else if(月字符串内容等于(“05”)){
monthString=“五月”;
}else if(月字符串内容等于(“06”)){
monthString=“June”;
}else if(月字符串内容等于(“07”)){
monthString=“七月”;
}else if(月字符串内容等于(“08”)){
monthString=“八月”;
}else if(monthString.contentEquals(“09”)){
monthString=“九月”;
}else if(monthString.contentEquals(“10”)){
monthString=“十月”;
}else if(monthString.contentEquals(“11”)){
monthString=“11月”;
}else if(monthString.contentEquals(“12”)){
monthString=“12月”;
}
finalReleaseDate=dateString+“”+monthString+”,“+yearString;
movieModel.setReleaseDate(最终ReleaseDate);
logcat中的消息是:java.lang.ArrayIndexOutOfBoundsException:length=2;index=5
(我已标记了显示此错误的行..)
请帮忙 您正在迭代从0到11的i
release数组仅包含10位数字,因此您应该从0迭代到9
哦,等等,这不是你的问题,你的主要问题是年只包含从0到3的4个对象,所以当i大于3时,你无法获得项目i
这就是我想的不。。。
日志cat显示的是index=5
,因此错误发生在我5岁时,但当我小于4岁时,您所说的那行包含在内,因此我猜您错误地读取了日志cat
它还表示长度为2,因此在读取日期数组或月份数组时会崩溃,但在读取年份数组时不会崩溃
在您可以使用的评论中,我以@Ken Wolf-Wolf的形式简要介绍了SimpleDateFormat
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-mm-dd", Locale.getDefault());
Date date = simpleDate.parse("");
simpleDate = new SimpleDateFormat("dd MMMM, yyyy.", Locale.getDefault());
String newFormatString = simpleDate.format(date);
您正在迭代从0到11的i
release数组仅包含10位数字,因此您应该从0迭代到9
哦,等等,这不是你的问题,你的主要问题是年只包含从0到3的4个对象,所以当i大于3时,你无法获得项目i
这就是我想的不。。。
日志cat显示的是index=5
,因此错误发生在我5岁时,但当我小于4岁时,您所说的那行包含在内,因此我猜您错误地读取了日志cat
它还表示长度为2,因此在读取日期数组或月份数组时会崩溃,但在读取年份数组时不会崩溃
在您可以使用的评论中,我以@Ken Wolf-Wolf的形式简要介绍了SimpleDateFormat
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-mm-dd", Locale.getDefault());
Date date = simpleDate.parse("");
simpleDate = new SimpleDateFormat("dd MMMM, yyyy.", Locale.getDefault());
String newFormatString = simpleDate.format(date);
问题不是发生在你说的地方。它可能出现在第一个或第三个if语句中。因为date[]和month[]的长度都只有2,而您正试图使用高于2的索引来访问它。问题并不是发生在您所说的地方。它可能出现在第一个或第三个if语句中。因为date[]和month[]的长度都只有2,并且您试图使用索引大于2的方式访问它。正确的方法应该是使用SimpleDataFormat作为Omar标记。
一旦你有了日期(或日历,可能取决于你对信息的使用),你可以使用本地设置来翻译它 正确的方法应该是使用Omar标记的SimpleDataFormat。
一旦你有了日期(或日历,可能取决于你对信息的使用),你可以使用本地设置来翻译它 为什么使用char[]?您可以直接使用字符串[]。字符串中有可用的拆分方法。所以,使用拆分方法可以将日期、月份和年份分开。您可以使用以下代码:
String date= "2015-04-10";
String[] temp= date.split("-");
温度[0]是2015,温度[1]是04,温度[1]是10。为什么使用字符[]?您可以直接使用字符串[]。字符串中有可用的拆分方法。所以使用分裂法
if (i < 4) {
year[i] = release[i]; //index 5 cannot be called here and year lenght is 4
}
if (i > 4 && i < 7) {
month[i] = release[i]; //index 5 is called here and month lenght is 2
}
if (i > 7 && i < 10) {
date[i] = release[i];
}
if (i<4) {
//2015 index 0,1,2,3
year[i] = release[i];
} else if (i>4 && i<7) {
//04 index 5,6
month[i-5] = release[i];
} else if (i>7 && i<10) {
//10 index 8,9
date[i-8] = release[i];
}
String [] date_splited = server_string.split("-");
String year = date_splited[0];
String month = date_splited[1];
String day = date_splited[2];