Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:数组索引越界错误_Java_Android_Arrays_String_Android Studio - Fatal编程技术网

Java Android:数组索引越界错误

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说:

我试图将包含日期的字符串转换为字符数组,然后提取月份并转换它

我使用的是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];