Java 从字符串中解析有符号的数字

Java 从字符串中解析有符号的数字,java,regex,parsing,regular-language,Java,Regex,Parsing,Regular Language,我有这样的字符串: "-------5548481818fgh7hf8ghf----fgh54f4578" -554848181878544578 我不想使用模式和匹配器进行解析。我有密码: string.replaceAll("regex", "")); 如何使regex排除除“-”以外的所有符号以获得类似字符串的字符串: "-------5548481818fgh7hf8ghf----fgh54f4578" -554848181878544578 这会奏效的 String Str

我有这样的字符串:

"-------5548481818fgh7hf8ghf----fgh54f4578"
-554848181878544578
我不想使用模式和匹配器进行解析。我有密码:

string.replaceAll("regex", ""));
如何使
regex
排除除“-”以外的所有符号以获得类似字符串的字符串:

"-------5548481818fgh7hf8ghf----fgh54f4578"
-554848181878544578
这会奏效的

String Str = new String("-------5548481818fgh7hf8ghf----fgh54f4578-");
String tmp = Str.replaceAll("([-+])+|([^\\d])","$1").replaceAll("\\d[+-](\\d|$)","");
System.out.println(tmp);

您可以使用此负前瞻正则表达式:

String s = "-------5548481818fgh7hf8ghf----fgh54f4578";

String r = s.replaceAll("(?!^[-+])\\D+", "");
//=> -554848181878544578
(?!^-)\D
将替换除开头连字符以外的每个非数字


备选方案:抓住反面,而不是替换负片。您选择删除您不想要的字符,而不是抓取您想要的字符,这似乎是任意的。javascript中的示例:

s = "-------5548481818fgh7hf8ghf----fgh54f4578"
s = '-' + s.match(/[0-9]+/g).join('')
// "-554848181878544578"

这很简单..你从
----5548481818fgh7hf8ghf----fgh54f4578
-554848181878544578
,你从中得到了什么?@支柱我已经更新了帖子。。。你能提高英语水平吗?作为一个以英语为母语的人,我觉得这很难理解。“我不想使用模式和匹配器解析”是什么意思?真的吗?“我有密码”谁在投否决票?我想这是个好主意,补充道。不知道为什么会被否决。是的,所有三个答案……似乎有人被冒犯了