为什么String.split(“:”)无法正常工作?

时间:2019-04-26 11:27:06

标签: java string

我对split()方法有疑问。我正在解析API的响应,并将时间分为几个小时和几分钟。我发现split()给了我错误的值。我在调试时为代码制作了屏幕截图,以向您展示:

enter image description here

您可以看到time的值为“ 08:15”,而tTime[0]的值为“”。

奇怪的是,在解析时,我在time循环中得到了for,当我阅读第10项时得到了“ 08:15”;从0到8都可以。我的代码或split()方法本身有问题吗?

@NonNull
    public static String increaseTimeString(String time, int valHours, int valMinutes, boolean saveToDB, String ID, Context context, TimeSavingColumn column){   // time (hh:mm) // czas pojawienia się zadania + czas na akceptację
        String[] tTime = time.split(":");
        String hour = tTime[0];
        String minute = tTime[1];
        tTime = null;
        if(hour.startsWith("0")) {
            tTime = hour.split("0");
            if(tTime.length > 0)  hour = tTime[0];
            else hour = "0";
        }
        tTime = null;
        if(minute.startsWith("0")) {
            tTime = minute.split("0");
            if (tTime.length > 0) minute = tTime[0];
            else minute = "0";
        }

        int iHour = Integer.parseInt(hour);
        int iMinute = Integer.parseInt(minute);

        if(valMinutes != -1){
            iMinute = iMinute + valMinutes;
            while (iMinute >= 60){
                iMinute = iMinute - 60;
                iHour++;
            }
        }

        int days = 0;

        iHour = iHour + valHours;

        String day = String.valueOf(days);

        if (iHour < 10 && iHour > 0) {
            hour = "0" + String.valueOf(iHour);
        } else {
            hour = String.valueOf(iHour);
        }
        if (iMinute < 10) {
            minute = "0" + String.valueOf(iMinute);
        } else {
            minute = String.valueOf(iMinute);
        }

        if(saveToDB){
            DBAcceptedTasks database = new DBAcceptedTasks(context);
            database.open();
            String actualTime = hour + ":" + minute;
            if (column == TimeSavingColumn.START)database.updateTask(ID, null, null, null, null, -1, -1, -1, -1, -1, -1, actualTime, null, null);
            if (column == TimeSavingColumn.END)database.updateTask(ID, null, null, null, null, -1, -1, -1, -1, -1, -1, null, actualTime, null);
            if (column == TimeSavingColumn.END)database.updateTask(ID, null, null, null, null, -1, -1, -1, -1, -1, -1, null, null, actualTime);
        }

        return hour + ":" + minute;
    }

4 个答案:

答案 0 :(得分:1)

这部分有问题:

    if(hour.startsWith("0")) {
      tTime = hour.split("0");
      if(tTime.length > 0)  hour = tTime[0];
      else hour = "0";
    }

因此,如果您输入的是“ 08:15”,则小时值为“ 08”。现在,当使用定界符“ 0”分割它时,将得到一个数组{ "", "8" }。因此,现在tTime [0]为“”。

改为使用:

    if(hour.startsWith("0")) {
      hour = hour.substring(1);
    }

PS:如果小时数不是以“ 0”开头,则没有问题。

答案 1 :(得分:1)

split方法可以很好地工作,但是然后您会有一个以if (hour.startsWith("0"))开头的代码块,它们会弄乱数字。

Integer.parseInt不介意带有前导零的数字。它不会爆炸,不会被当作八进制或以其他方式发出抱怨,因此如果hour.startsWith("0"),您不需要做任何特别的事情。

另外,操纵时间要容易得多,因为整数int是分钟数,而不是小时数和分钟数。将单个int转换回小时,分钟和天,或仅用于格式化和显示的任何内容:

public static String increaseTimeString(
        String time, int minutesToAdd,
        boolean saveToDB, String ID, Context context, TimeSavingColumn column) {
    String[] parts = time.split(":");
    int minutes = (Integer.parseInt(parts[0]) * 60) + Integer.parseInt(parts[1]) + minutesToAdd;
    time = String.format("%02d:%02d", (minutes / 60) % 24, minutes % 60);

    if (saveToDB) {
        DBAcceptedTasks database = new DBAcceptedTasks(context);
        database.open();
        database.updateTask(ID, null, null, null, null,
            -1, -1, -1, -1, -1, -1,
            column == TimeSavingColumn.START ? time : null,
            column == TimeSavingColumn.END ? time : null,
            column == TimeSavingColumn.END ? time : null);
    }

    return time;
}

答案 2 :(得分:0)

问题出在代码中,请尝试

"1.23+1"

处理此问题的最佳方法是将小时和分钟转换为整数。

答案 3 :(得分:0)

在您的代码中,+行之后

数组tTime的状态为if(hour.startsWith("0")) { tTime = hour.split("0"); if(tTime.length > 0) hour = tTime[1];//index should be 1 else hour = "0"; } tTime = null; if(minute.startsWith("0")) { tTime = minute.split("0"); if (tTime.length > 0) minute = tTime[1];//index should be 1 else minute = "0"; }

因此import pandas as pd df = pd.DataFrame() df['Date'] = ['6/24/2019','6/14/2019','2019-09-06 00:00:00','6/14/2019','6/14/2019'] df['newDate'] = pd.to_datetime(df['Date']) print (df) Date newDate 0 6/24/2019 2019-06-24 1 6/14/2019 2019-06-14 2 2019-09-06 00:00:00 2019-09-06 3 6/14/2019 2019-06-14 4 6/14/2019 2019-06-14 之后的小时是数组tTime的第0个索引,即“”。