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