正则表达式可以从输入字符串中获取数字序列,包含反斜杠而不是数字,例如 -
"12\34a56ss7890"
我需要 -
1234567890
答案 0 :(得分:3)
如果我们假设你在String中有这个。你可以这样做:
string = string.replaceAll("\\D", "");
这将替换字符串中的所有非数字字符。
答案 1 :(得分:2)
str.replaceAll("[^\d]", "");
bootnote:我不是java开发人员,但正则表达式本身应该是正确的
答案 2 :(得分:2)
很抱歉添加另一个答案,但这是必需的,因为这不适合评论。
我认为这是因为\ 34。如果我拨打System.out.print("12\34a56ss7890");
,我将获得以下输出12a56ss7890
。这是因为\ 34将被转义。这是Java中的一个问题。您可以通过首先在InputStream上调用此方法来解决此问题:
private InputStreamReader replaceBackSlashes() throws Exception {
FileInputStream fis = new FileInputStream(new File("PATH TO A FILE");
Scanner in = new Scanner(fis, "UTF-8");
ByteArrayOutputStream out = new ByteArrayOutputStream();
while (in.hasNext()) {
String nextLine = in.nextLine().replace("\", "");
out.write(nextLine.getBytes());
out.write("\n".getBytes());
}
return new InputStreamReader(new ByteArrayInputStream(out.toByteArray()));
}
BTW:对不起我的编辑,但是代码中有一点错误。
调用此方法后,您将把InputStream转换为String并在String上调用它:
string = string.replaceAll("\\D", "");
现在应该有效:)
答案 3 :(得分:2)
String num;
String str =" 12\34a56ss7890";
str= str.replace("\34", "34");
String regex = "[\\d]+";
Matcher matcher = Pattern.compile( regex ).matcher( str);
while (matcher.find( ))
{
num = matcher.group();
System.out.print(num);
}
replace \34 by 34 and match the rest using regular expression.
答案 4 :(得分:1)
字符\34
是字符串12\34a56ss7890
中的八进制数字,因此您可以使用:
str.replaceAll("\034", "34").replaceAll("\\D", "")
答案 5 :(得分:1)
以下示例:
String a ="1\2sas";
String b ="1\\2sas";
System.out.println(a.replaceAll("[a-zA-Z\\\\]",""));
System.out.println(b.replaceAll("[a-zA-Z\\\\]",""));
给出输出:
1X
12
其中X不是X而是一个小矩形 - 当显示控件的文本不知道如何绘制它时显示的符号,即所谓的不可打印字符。
这是因为在字符串中,“\ 2”部分显然会尝试被解释为单个转义符号“\ u0002” - 类似于“\ n”“\ t” - 您可以在调试器中看到这一点(我试过它使用NetBeans)
由于replaceAll方法的第一个参数被传递给[Pattern.compile](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(java。 lang.String,java.lang.String))它需要是escaped twice而不是String文字(如b)。
因此,如果字符串“12 \ 34a56ss7890”在屏幕上看起来像这样,那么就像这样打印出来:
System.out.println("12\\34a56ss7890");
在第二个例子中解决了。
但是如果字面值为“12 \ 34a56ss7890”,那么我认为你无法用单正则表达式来处理它,因为如果后面跟着反斜杠一个数字被解释为\ u0000 - \ u0009所以我能想到的最好的解决方案是:
str.replaceAll("\u0000","0").replaceAll("\u0001","1") ... .replaceAll("\u0009","9").replaceAll("[^\\d]")
第一个然后替换(\ u0000- \ u0009)可能会被重写为for循环,使其看起来很优雅。
+1以获得优秀的问题:)
编辑: 实际上,如果反斜杠后跟多个数字,则它们都被解释为单个符号 - 反斜杠后最多三个数字,第四个数字将被视为单个数字。
因此,我的解决方案通常不正确,但可以延伸到。我会在下面推荐Robin的解决方案,因为它效率更高。
答案 6 :(得分:1)
使用正则表达式。
String numvber;
String str =" 12\34a56ss7890";
str= str.replace("\34", "34");
String regex = "[\\d]+";//match only digits.
Matcher matcher = Pattern.compile( regex ).matcher( str);
while (matcher.find( ))
{
num = matcher.group();
System.out.print(num);
}