我想知道从字符串中删除句点而不影响十进制数的正则表达式,然后将它们存储为单独的标记
str = "..A 546.88 end."
在上面的字符串值中,我只需要值“546.88”、“A”、“end”并将它们存储到一个数组中
感谢帮助
最通用的是:
[0-9]+(\.[0-9][0-9]?)?
我创建了一个小样本来执行您在评论中提出的要求:
我想要的是一个包含“A”、“546.88”、“end”的数组,如果可能的话
public class JavaApplication39 {
static String str = "..A 546.88 end.";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Create a pattern to match breaks
Pattern p = Pattern.compile("[0-9]+(\\.[0-9][0-9]?)?");
// Split input with the pattern
String[] result = p.split(str);
Matcher m = p.matcher(str);
ArrayList<String> strings = new ArrayList<>();
while (m.find()) {//all those that match
strings.add(m.group());
//System.out.println(m.group());
}
for (int i = 0; i < result.length; i++) {//all those that dont match
strings.add(result[i].replaceAll("\\.", "").trim());//strip '.' and ' '
// System.out.println(result[i]);
}
//all contents in array
for (Iterator<String> it = strings.iterator(); it.hasNext();) {
String string = it.next();
System.out.println(string);
}
}
}
你似乎有两个问题。首先是删除不属于十进制数的所有句点,您可以通过保留以下正则表达式中的两个组来做到这一点:
"(.*(\\D|^))\\.+((\\D|$).*)"
这个正则表达式是:任何东西 - 不是数字或行首 - 句点 - 不是数字或行尾 - 任何东西
String s = "..A 546.88 .end.";
Pattern p = Pattern.compile("(.*(\\D|^))\\.+((\\D|$).*)");
Matcher m = p.matcher(s);
while(m.matches())
{
s = m.group(1) + "" + m.group(3);
System.out.println(s);
m = p.matcher(s);
}
给
A 546.88 end
第二个问题是从剩余的字符串中获取三个值,您可以使用myString.split("\\s+")
它们 - 它为您提供数组中的三个值。
String[] myArray = s.split("\\s+");