Java 使用正则表达式提取某些给定字符前面的整数

Java 使用正则表达式提取某些给定字符前面的整数,java,Java,我正在尝试编写一个函数,它将接受一个输入字符串并逐行读取它,我想做的是在公制和英制之间转换度量单位 很明显,英里/公里和千克/磅之间的实际转换是一个简单的数学问题,但我有点困惑于如何正确提取这些整数,以便转换它们 为了增加难度,输入会有所不同,我需要识别不同的格式(整数和度量单位之间的空格,不同的拼写[英里、英里、英里、公里、公里等]) 现在我有了 if (isMetric) { for (String line : input.split("[\\r\\n]+")) {

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

很明显,英里/公里和千克/磅之间的实际转换是一个简单的数学问题,但我有点困惑于如何正确提取这些整数,以便转换它们

为了增加难度,输入会有所不同,我需要识别不同的格式(整数和度量单位之间的空格,不同的拼写[英里、英里、英里、公里、公里等])

现在我有了

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

            }
            return input;
        }
要阅读每一行,我想我可能需要结合使用
String.substring
和Regex,但我是个新手


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

非常感谢

编辑:

例如,正如你所问:

输入:

我今天跑了50英里,昨天跑了1英里,还举起了20磅和5磅的重量

输出:


我今天跑了80公里,昨天跑了1.6公里,我还举起了9公斤和2.2公斤的重量

这里有一个解决方案,可以让您找到所有匹配项,包括空格或空格,以及不同的单位拼写

请注意,在模式中,所有具有前缀的单位必须位于其前缀之前(因此此处,
miles
必须位于
mil
之前),这一点很重要

你可以像我一样,用英里数,但用公里数模式。如果需要,也可以组合这两个表达式。在我的测试用例中,我得到了输出:

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

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

您应该尝试更精确地描述您的输入和预期输出。我认为您可以使用StringTokenizer类解决您的问题。在这里输入您的输入和预期输出。我为大家添加了一个示例“非常感谢任何类型的指导或到有用文章的链接”对外部资源的非主题请求。这太棒了!谢谢。只是一个简单的问题-替换数量和单位的值(使用转换的等价物)的最好方法是简单的mileM.group(i).replace(mileM.group(i),NEWVALUE)吗?这对我来说似乎不正确……事实上,我认为您需要使用原始字符串,并使用找到的值的索引/长度,然后从那里替换它们?是的,乍一看这似乎是合理的(您的第二条评论,而不是第一条评论)。重用上一个匹配的结束索引和当前匹配的开始索引之间的字符。然后附加与当前匹配对应的转换值。
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