java - 如何检查带有整数的字符串是否与 Java 中的特定模式匹配?
问题描述
我只希望在我的方法中允许使用具有非常特定格式的字符串。格式为“Intx^Int”。下面是一些具体的例子:
- “5x^2”
- “-21x^5”
- “14x^-12”
我尝试了以下代码,但它似乎无法正常工作:
import java.util.regex.Pattern;
Pattern p = Pattern.compile("\\dx^\\d");
System.out.println(p.matcher("14x^-12").matches());
解决方案
您只匹配一个数字(不是整数),前面没有任何符号(似乎您想匹配-
数字前面的可选字符)。您也未能转义^
作为特殊正则表达式元字符的字符,它表示字符串的开头(如果Pattern.MULTILINE
使用选项,则为行)。
您可以使用
Pattern p = Pattern.compile("-?\\d+x\\^-?\\d+");
System.out.println(p.matcher("14x^-12").matches());
模式匹配
-?
- 一个可选的-
\d+
- 一位或多位数字x
- 一个x
-\^
- 一个^
字符-?
- 一个可选的-
\d+
- 一位或多位数字
要支持带分数的数字,您可以进一步调整正则表达式:
Pattern p = Pattern.compile("-?\\d+(?:\\.\\d+)?x\\^-?\\d+(?:\\.\\d+)?");
Pattern p = Pattern.compile("-?\\d*\\.?\\d+x\\^-?\\d*\\.?\\d+");
另外,请参阅合理地解析科学记数法?.
推荐阅读
- node.js - NodeJS:可靠地作用于封闭的流
- html - AngularJS复选框来打开/关闭我的过滤器
- c# - 保存图像缩略图而不是来自 MediaStore.ActionImageCapture 的完整图像
- mysql - “Opencart 将 varchar 的数据类型转换为文本 mysql” 如何解决?
- xamarin.forms - Xamarin.forms 等待指示器在正常等待功能上不显示
- php - PHP数组中有没有办法显示换行符?
- android - 如何在数据绑定中绑定工具栏中的编辑文本并将文本传递给视图模型
- c# - 有没有办法在 ASP.NET MVC 5 中包含我的项目之外的图像?
- amazon-web-services - 未为 ENA 启用 AMI
- haskell - 安装 hip 时堆栈不解决依赖关系