现在,如果我有这样的字符串:
String start = "(1374)(48.4%)(32)(100%)(290)(43.1%)";
如何提取六个数字1374 48.4 32 100 290 43.1
或1374 48.4% 32 100% 290 43.1%
?可以用正则表达式完成吗?
答案 0 :(得分:2)
您可以搜索标识浮点数的正则表达式:([+-]?(\d+\.)?\d+)
String start = "(1374)(48.4%)(32)(100%)(290)(43.1%)";
Pattern p = Pattern.compile("([+-]?(\\d+\\.)?\\d+)");
Matcher m = p.matcher(start);
while (m.find()) {
System.out.println(m.group(1));
}
或使用正则表达式,同时确保括号位于:
Pattern p = Pattern.compile("\\(([+-]?(\\d+\\.)?\\d+)\\%?\\)");
答案 1 :(得分:0)
让我们在没有正则表达式的情况下做到这一点!
int i = 0;
while (i < start.length()) {
while (i < start.length()) {
char ch = start.charAt(i);
// Maybe add other characters, e.g. %, if desired.
if (Character.isDigit(ch) || ch == '.') {
break;
}
++i;
}
int startOfBlock = i;
while (i < start.length()) {
char ch = start.charAt(i);
if (!Character.isDigit(ch) && ch != '.') {
break;
}
++i;
}
if (i > startOfBlock) {
System.out.println(start.substring(startOfBlock, i));
}
}
答案 2 :(得分:0)
或者您可以尝试以下正则表达式[\d\.%]+
它会给出包含以下项目的字符串组合
\d
(数字)
\.
点和
%
诉讼签到一次或多次
点击此处查看live demo
答案 3 :(得分:0)
String start = "(1374)(48.4%)(32)(100%)(290)(43.1%)";
for(String splitString : start.split("[()]")) {
System.out.print(splitString + " ");
}