-1

我正在尝试编写一个函数,该函数将接受输入字符串并逐行读取它,而我要做的是在公制和英制之间转换测量单位。

显然,英里/公里和公斤/磅之间的实际转换是简单的数学运算,但我对提取这些整数的正确方法有点困惑,所以我可以转换它们。

为了使事情变得更加困难,输入会有所不同,我将需要识别不同的格式(整数和测量单位之间的空格,不同的拼写 [miles,mile,mi,km,kilometer etc])

现在我有

if (isMetric) {
            for (String line : input.split("[\\r\\n]+")) {

            }
            return input;
        }

要阅读每一行,我想我可能需要使用String.substring正则表达式的组合,但我很新。

任何形式的指导或有用文章的链接将不胜感激,我当然不是在这里寻找一个直接的解决方案!

非常感谢!

编辑:

例如,正如您所问:

输入:

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!

4

1 回答 1

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

然后,您可以进行任何您想要的转换,或使用其他单位重建字符串。

于 2013-07-17T12:10:15.687 回答