Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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
Android 将字符串随时间转换为分钟_Android_Time_Type Conversion - Fatal编程技术网

Android 将字符串随时间转换为分钟

Android 将字符串随时间转换为分钟,android,time,type-conversion,Android,Time,Type Conversion,我正在开发一个Android应用程序,该应用程序以字符串形式获取时间(持续时间)值 例如,该应用程序可以获得如下值:6小时43分钟 或者一个值,比如:15分钟 我正在寻找一种在几分钟内将字符串转换为整数值的方法 我已尝试使用此函数,但无法提取所需的值: str = str.replaceAll("[^\\d.]", ""); 编辑: 可能会出现6小时这样的结果,唯一已知的条件是分钟总是四舍五入为整数,最小值为1分钟如果可以分别获得每分钟和小时,则可以使用字符串。替换(“分钟”,“分钟”)然后使

我正在开发一个Android应用程序,该应用程序以字符串形式获取时间(持续时间)值

例如,该应用程序可以获得如下值:6小时43分钟

或者一个值,比如:15分钟

我正在寻找一种在几分钟内将字符串转换为整数值的方法

我已尝试使用此函数,但无法提取所需的值:

str = str.replaceAll("[^\\d.]", "");
编辑:


可能会出现6小时这样的结果,唯一已知的条件是分钟总是四舍五入为整数,最小值为1分钟

如果可以分别获得每分钟和小时,则可以使用
字符串。替换(“分钟”,“分钟”)
然后使用
整数.parseInt()

如果你的时间超过了6小时43分钟,你必须拆分字符串。

如果你可以分别计算每分钟和每小时,你可以使用
字符串。替换(“分钟”,“分钟”)
然后使用
整数.parseInt()

如果你超过了6小时43分钟,你必须拆分字符串。

我不确定这是否可以在一个正则表达式中完成,但如果我是你,我会使用不同的正则表达式来查找小时数、分钟数、秒数等

给定您提到的格式的字符串,您可以首先使用以下正则表达式提取小时数:

\d+(?= hours?)
然后提取分钟数:

\d+(?= mins?)
如果输入字符串中可能出现秒数,您也可以使用它来提取秒数:

\d+(?= secs?)

如果任何正则表达式不匹配,这意味着字符串中没有该信息。

我不确定是否可以在单个正则表达式中完成此操作,但如果我是你,我会使用不同的正则表达式来查找小时数、分钟数、秒数等

给定您提到的格式的字符串,您可以首先使用以下正则表达式提取小时数:

\d+(?= hours?)
然后提取分钟数:

\d+(?= mins?)
如果输入字符串中可能出现秒数,您也可以使用它来提取秒数:

\d+(?= secs?)

如果任何正则表达式不匹配,这意味着字符串中没有该信息。

问题:如果不添加额外的条件,您永远不会知道有什么问题,例如: 15小时和15分钟都将存储在相同的整数值中,您最终需要在某些条件下区分它们以满足所有问题


说到这个问题,您可以通过使用字符串拆分案例来实现所有这一切,但您需要手动满足所有情况,记住用户可以使用任何拼写单词,如hours可以hrs等等。问题:如果不附加以下条件,您永远不会知道有什么问题: 15小时和15分钟都将存储在相同的整数值中,您最终需要在某些条件下区分它们以满足所有问题


说到这个问题,您可以通过使用字符串拆分大小写来实现所有这一切,但您需要手动满足所有情况,记住用户可以使用任何拼写单词,如hours可以hrs等等。您可以在空白处拆分字符串并使用数组中的值

String value1 = "6 hours 43 mins";
String value2 = "15 mins";

String[] resultList1 = value1.split(" ");
String[] resultList2 = value2.split(" ");

int minutes1 = 0;
int minutes2 = 0;

if(resultList1.length == 4) {
  minutes1 = Integer.parseInt(resultList1[0]) * 60 + Integer.parseInt(resultList1[2]);
} else {
  minutes1 = Integer.parseInt(resultList1[0]);
}

if(resultList2.length == 4) {
  minutes2 = Integer.parseInt(resultList2[0]) * 60 + Integer.parseInt(resultList2[2]);
} else {
  minutes2 = Integer.parseInt(resultList2[0]);
}

System.out.println(minutes1);
System.out.println(minutes2);
结果是:

403
15

您可以在空白处拆分字符串并使用数组中的值

String value1 = "6 hours 43 mins";
String value2 = "15 mins";

String[] resultList1 = value1.split(" ");
String[] resultList2 = value2.split(" ");

int minutes1 = 0;
int minutes2 = 0;

if(resultList1.length == 4) {
  minutes1 = Integer.parseInt(resultList1[0]) * 60 + Integer.parseInt(resultList1[2]);
} else {
  minutes1 = Integer.parseInt(resultList1[0]);
}

if(resultList2.length == 4) {
  minutes2 = Integer.parseInt(resultList2[0]) * 60 + Integer.parseInt(resultList2[2]);
} else {
  minutes2 = Integer.parseInt(resultList2[0]);
}

System.out.println(minutes1);
System.out.println(minutes2);
结果是:

403
15

使用正则表达式获取每对数字/时间单位。您可以使用以下方法轻松解析:

(\\d+) (\\w+)
  • 第1组:数值

  • 第2组:时间单位

    (注意,我在两者之间使用了空格(如果需要,可以是可选的)

使用Java
Pattern
类来使用该正则表达式

    Pattern p = Pattern.compile("(\\d+) (\\w+)");
然后,您只需在每个匹配项上进行迭代,就可以得到这对匹配项
类型
/

    Matcher m = p.matcher(s);
    while(m.find()){
        String type = m.group(2);
        int value = Integer.parseInt(m.group(1))
        ...
    }
    
因此,只需使用一个开关将数字转换为分钟,并将其添加到变量中,省略
break
,即可获得一个漂亮(但效率不高)的转换器:

switch(type){
//Add more time unit in the correct order if needed
case "days":
    value *= 24;
case "hours":
    value *= 60;
case "mins":
    mins += value;
    break;
}

每种类型都会将值转换为正确的分钟数,最后,您将以分钟为单位得到结果。

使用正则表达式获取每对数字/时间单位。您可以使用以下方法轻松解析:

(\\d+) (\\w+)
  • 第1组:数值

  • 第2组:时间单位

    (注意,我在两者之间使用了空格(如果需要,可以是可选的)

使用Java
Pattern
类来使用该正则表达式

    Pattern p = Pattern.compile("(\\d+) (\\w+)");
然后,您只需在每个匹配项上进行迭代,就可以得到这对匹配项
类型
/

    Matcher m = p.matcher(s);
    while(m.find()){
        String type = m.group(2);
        int value = Integer.parseInt(m.group(1))
        ...
    }
    
因此,只需使用一个开关将数字转换为分钟,并将其添加到变量中,省略
break
,即可获得一个漂亮(但效率不高)的转换器:

switch(type){
//Add more time unit in the correct order if needed
case "days":
    value *= 24;
case "hours":
    value *= 60;
case "mins":
    mins += value;
    break;
}
每种类型都会将值转换为正确的分钟数,最后,您将在分钟内得到结果。

正如前面的答案所示,字符串拆分()或模式匹配器都可以工作。虽然我不确定哪一种效率更高,但在这种情况下可能与此无关。我的版本:

String timeStr = "2 hours 15 mins";
String[] parts = timeStr.split(" ");

int totalMins = 0;
for(int i=1; i< parts.length; i+=2) {
    // Add checking for "days", etc., if necessary.
    if(parts[i].equals("hours")) {
        int h = Integer.parseInt(parts[i-1]);
        totalMins += 60 * h;
    } else if(parts[i].equals("mins")) {
        int m = Integer.parseInt(parts[i-1]);
        totalMins += m;
    }
}

System.out.println("totalMins = " + totalMins);
>> totalMins = 135
String timeStr=“2小时15分钟”;
String[]parts=timeStr.split(“”);
整数totalMins=0;
对于(int i=1;i>totalMins=135
正如前面的答案所示,String split()或Pattern Matcher都可以工作。虽然我不确定哪一种效率更高,但在这种情况下可能与此无关。我的版本:

String timeStr = "2 hours 15 mins";
String[] parts = timeStr.split(" ");

int totalMins = 0;
for(int i=1; i< parts.length; i+=2) {
    // Add checking for "days", etc., if necessary.
    if(parts[i].equals("hours")) {
        int h = Integer.parseInt(parts[i-1]);
        totalMins += 60 * h;
    } else if(parts[i].equals("mins")) {
        int m = Integer.parseInt(parts[i-1]);
        totalMins += m;
    }
}

System.out.println("totalMins = " + totalMins);
>> totalMins = 135
String timeStr=“2小时15分钟”;
String[]parts=timeStr.split(“”);
整数totalMins=0;
对于(int i=1;i