我正在尝试编写一个函数,它将接受一个输入字符串并逐行读取它,我想要做的是在公制和英制之间转换测量单位。
显然,英里/公里和千克/磅之间的实际转换是简单的数学运算,但我对于提取这些整数的正确方法感到有点难过,所以我可以转换它们。
为了使事情变得更加困难,输入会有所不同,我需要识别不同的格式(整数和测量单位之间的空格,不同的拼写[英里,英里,英里,公里,公里等])< / p>
现在我有了
if (isMetric) {
for (String line : input.split("[\\r\\n]+")) {
}
return input;
}
要读取每一行,我想我可能需要使用String.substring
和Regex的组合,但我很新。
非常感谢任何形式的指导或有用文章的链接,我当然不是在寻找一个直接的解决方案!
非常感谢!
编辑:
例如你问:
输入:
I ran 50miles today, 1mile yesterday, and I also lifted a 20 pound and a 5lb weight!
输出:
I ran 80km today, 1.6km yesterday, and I also lifted a 9kg and a 2.2kg weight!
答案 0 :(得分:2)
这是一个解决方案,可让您找到包含或不包含空格以及不同单位拼写的所有匹配。
请注意,在模式中,所有具有前缀的单位都必须在其前缀之前(因此,miles
必须在mil
之前)。
// \d+ matches a number. \s* matches any number of spaces.
String milePattern = "(\\d+)\\s*((miles)|(mile)|(mil))";
String kmPattern = "(\\d+)\\s*((kilometers)|(km)|(kilometres))";
// Compile the patterns (you should not do that at each method call, in your real code)
Pattern mileP = Pattern.compile(milePattern);
Pattern kmP = Pattern.compile(kmPattern);
// You can match one or multiple lines all the same.
String input = "I ran 1001km or 601 mile \n that is the same as 602 mil or 603miles or 1002 kilometers.";
// Create matcher instance on your input.
Matcher mileM = mileP.matcher(input);
// Iterate over all mile-matches (find will 'advance' each time you call it)
while (mileM.find()) {
// Retrieve the value and the unit
String amount = mileM.group(1);
String unit = mileM.group(2);
// You can also access some data about the match
int idx = mileM.start();
// And do whatever you need with it
System.out.println("Found a mile value: " + amount + " with unit " + unit + " starting at index: " + idx);
}
你可以像对待里程那样做,但是用公里模式。如果需要,您还可以组合两个表达式。在我的测试用例中,我得到了输出:
Found a mile value: 601 with unit mile starting at index: 16
Found a mile value: 602 with unit mil starting at index: 47
Found a mile value: 603 with unit miles starting at index: 58
Found a km value: 1001 with unit km starting at index: 6
Found a km value: 1002 with unit kilometers starting at index: 70
然后,您可以执行任何所需的转换,或者使用其他单位重建字符串。