【问题标题】:how to handle java.lang.StringIndexOutOfBoundsException: due to invalid format fromapi response如何处理 java.lang.StringIndexOutOfBoundsException:由于来自 api 响应的格式无效
【发布时间】:2022-11-24 20:23:19
【问题描述】:
String response = "20221124112443" 

这种格式的数据应该来自 API,但我不知道,但来自 API 的一些不同格式的响应即将到来,所以我遇到了以下错误和应用程序崩溃。

java.lang.StringIndexOutOfBoundsException: 开始 0,结束 -1,长度 11

public void getCameraDateAndTime() {
                            Log.i("TAG", "onChanged: " + response);
                            String datetime = response.replace(";", "");
                            String mYear = datetime.substring(0, 4);
                            String mMonth = datetime.substring(4, 6);
                            String mDay = datetime.substring(6, 8);
                            Log.i("TAG", "onChanged: " + mYear + " " + mMonth + " " + mDay); }

任何人都可以帮助我如何处理这个错误,这样应用程序就不会崩溃,

【问题讨论】:

  • 112443 最后是什么?我相信月份 (11) 和日期 (24) 已经重复 - 这是正确的吗?如果是,那么最后的 43 是多少?
  • 24是日,11是月,时分秒

标签: java android datetime datetime-parsing


【解决方案1】:

我建议您使用 java.time API 并将处理(解析并从解析的字符串中获取数据)放在 try/catch 块中。

演示:

import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class Main {
    public static void main(String[] args) {
        String response = "20221124112443";
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("uuuuMMddHHmmss");
        try {
            LocalDateTime ldt = LocalDateTime.parse(response, parser);
            System.out.println(ldt);
            System.out.printf("Year: %d, Month: %d, Day: %d", ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth());
        } catch (DateTimeParseException e) {
            System.out.println("Wrong data");
            // throw new IllegalArgumentException("Wrong data" + response); // Recommended so that it can be handled by the caller
        }
    }
}

输出:

2022-11-24T11:24:43
Year: 2022, Month: 11, Day: 24

从以下位置了解有关现代日期时间 API 的更多信息Trail: Date Time.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 2021-03-26
    • 2019-04-25
    • 1970-01-01
    • 2021-06-06
    • 2013-08-27
    • 2015-01-26
    • 2021-03-30
    相关资源
    最近更新 更多