我在代码中使用了这个来识别整数
Pattern patternNumber = Pattern.compile("[0-9]+");
为了读取输入,我一直在使用*:
String input = "x: 1.6 ..10;";
String[] meta = a.split("(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b");
*由我发现的内容提供 here ,稍加修改以适应。我对正则表达式没有太多经验,但这条线对我来说神奇地有效。
然后我继续包含 float :
Pattern patternNumber = Pattern.compile("\\d*\\.\\d+|\\d+");
但现在我似乎无法让它工作。对于 float 部分,它分割数字,给我:
1
.
6
我想要的是:
1.6
我发现如果我单独使用它会起作用:
String input = "1.6";
String[] meta = a.split("\\D\\.\\D");
知道如何使这部分与 split 方法中的表达式的其余部分一起使用吗?
最佳答案
我认为split
不是实现您目的的最佳工具。
split
将在正则表达式上分割您的输入字符串。例如,如果您这样做 split
上1,2,3,apples
使用正则表达式,
,你会得到1
, 2,
3
,和apples
.
你的复杂split
正则表达式 "(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b*(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b"
基本上尝试在单词之间的边界上分割字符串(考虑到单词位于字符串的开头/结尾,或者以 .
( ..10
)开头)。
相反,显式查找数字本身会容易得多!无需在数字之间的空格上进行分割,只需显式匹配数字即可。
所以你使用正则表达式来表示数字/ float \\d*\\.\\d+|\\d+
并使用 myMatcher.group()
打印出匹配项(而不是拆分) .
例如:
String input = "x: 1.6 ..10;";
myPattern = Pattern.compile('\\d*\\.\\d+|\\d+');
myMatcher = Pattern.matcher(input);
while (myMatcher.find()) {
System.out.println(myMatcher.group());
// will print 1.6, .10
}
根据您想要的内容(例如,关于 ..10
),可以调整正则表达式。
关于java - 修改正则表达式以允许 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632683/