我正在开发一款Android应用,它将时间(持续时间)值作为字符串。
例如,应用程序可以获得如下值:6小时43分钟
或类似值:15分钟
我正在寻找一种方法,可以在几分钟内将此字符串转换为整数值。
我尝试过使用此功能,但我无法提取所需的值:
str = str.replaceAll("[^\\d.]", "");
修改
可能有6小时的结果,唯一已知的条件是分钟总是四舍五入为整数,最小值为1分钟
答案 0 :(得分:3)
使用正则表达式获取每对数字/ time_unit。您可以使用以下命令轻松解析:
(\\d+) (\\w+)
第2组:时间单位
(请注意,我在两者之间使用了一个空格(如果需要,可以是可选的)
使用Java Pattern
类来使用该正则表达式
Pattern p = Pattern.compile("(\\d+) (\\w+)");
然后你只需要迭代每场比赛就可以得到这对夫妻type
/ value
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;
}
每种类型都会将值转换为正确的分钟数,最后,您将得到几分钟的结果。
答案 1 :(得分:2)
问题:如果没有额外的条件,你几乎不知道如下: 15小时15分钟将以相同的整数值存储,您最终需要在某些条件下区分它们以满足所有问题。
提出这个问题,您可以通过使用String拆分案例来实现所有这些,但您需要手动满足所有情况,记住用户可以使用任何拼写单词,如小时可以小时等等
答案 2 :(得分:2)
您可以在空白处拆分String并使用数组中的值。
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
答案 3 :(得分:1)
如果您可以分别获得每分钟和每小时,则可以使用string.replace("mins", "")
,然后使用Integer.parseInt()
。
如果你像6小时43分钟一样进行上瘾,你必须分开弦乐。
答案 4 :(得分:1)
我不确定这是否可以在一个正则表达式中完成,但如果我是你,我会使用不同的正则表达式来查找小时数,分钟数,秒数等。
给定您提到的格式的字符串,您可以先使用此正则表达式提取小时数:
\d+(?= hours?)
然后提取分钟数:
\d+(?= mins?)
如果输入字符串中出现秒数,您也可以使用它来提取秒数:
\d+(?= secs?)
如果任何正则表达式不匹配,则表示字符串中没有该信息。
答案 5 :(得分:1)
如前面的答案所示,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
答案 6 :(得分:1)
String time = "6 hours 43 mins";//or (43 mins) or (6 hours)
int h, m;
String[] parts = time.split(" ");
if (parts.length == 4) {
h = parts[1];
m = parts[3];
} else if (parts.length == 2) {
if (parts[1].isEqualTo("hours") {
h = parts[0];
} else if (parts[1].isEqualTo("mins") {
m = parts[0];
}
}
return h*60+m;