我希望我的 Java 程序能够回答科学教科书上的问题,例如,
如果骑车人的平均速度为 11.5 公里/小时,他在 4 小时内可以行驶多远?
作为字符串,然后我希望程序能够识别问题中提到的每个数字和单位,例如在上面的示例中,它将是 4.0 小时和 11.5 公里/小时。
是否可以使用正则表达式来实现此目的?
非常感谢
最佳答案
解决方案:
下面是一个 Java 示例代码,可以满足您的需求:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regexp {
public static void main(String[] args) {
String units = "h|km/h";// Add more units separated by pipes here
String test = "How far can a cyclist travel in 4.0 h if his average speed is 11.5 km/h?";
Pattern p = Pattern.compile("\\d+(?:\\.\\d+)?\\s*(?:" + Matcher.quoteReplacement(units) + ")",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(test);
System.out.println("Numbers and units recognized: ");
while(m.find()) {
System.out.println(m.group());
}
}
}
它将输出:
Numbers and units recognized: 4.0 h 11.5 km/h
详细信息:
我假设数字具有以下形式:
一个或多个数字(0-9),可选后跟一个点和一个或多个数字(0-9)
您可以根据需要在管道分隔列表units变量中添加更多单位
关于java - 句子识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226248/