我有
1. This is a test message
我想打印
This is a test message
我正在尝试
String delimiter=".";
String[] parts = line.split(delimiter);
int gg=parts.length;
比想要打印数组
for (int k ;k <gg;K++)
parts[k];
但我的gg总是0。 我错过了什么。 我只需要删除数字和。和白色空间
该号码可以是1(或)5位数
答案 0 :(得分:11)
您使用"."
作为分隔符,您应该打破.
字符的特殊含义。
正则表达式中的.
字符是“任何字符”,因此您的拆分只是根据“任何字符”进行拆分,这显然不是您所追求的。
使用"\\."
作为分隔符
有关预定义角色类的更多信息,您可以have a look at the tutorial。
有关一般正则表达式的更多信息(包括上述内容),您可以尝试this tutorial
修改强>:
附:您可以使用String.replaceAll()
方法使用单线程来实现您的目标(删除数字)。
System.out.println(line.replaceAll("[0-9]+\\.\\s+", ""));
将提供输出
This is a test message
输入您的输入示例。
这个想法是:[0-9]
是任何数字。 - +
表示可以有任意数量的数字,大于0. \\.
是一个点(如上所述断开),\\s+
至少有一个空格。
它全部用空字符串代替。
但是请注意,对于像"1. this is a 2. test"
这样的字符串 - 它会提供“这是一个测试”,并删除“2.”,所以请仔细考虑这是否确实是你所追求的。
答案 1 :(得分:4)
使用以下代码..
String delimtor="\\."; // use this because . required to be skipped
String[] parts = line.split(delimtor);
为你的for循环。
for (int k=0 ;k <gg.length;K++)
parts[k];
答案 2 :(得分:2)
试试这个
String delimtor = "\\.";
“”。对正则表达式有特殊意义。
答案 3 :(得分:1)
如果您只是想删除前缀号码,那么您可以在一行中完成。不确定你是否真的要拆分多个点。如果它只是前缀,那么你可以在一行中完成
String s = "1. with single digit";
String s2 = "999. with multiple digits";
String s3 = "999. with multiple digits . and . dots";
assertEquals("with single digit", (s.substring(s.indexOf(".") + 1).trim()));
assertEquals("with multiple digits", (s2.substring(s2.indexOf(".") + 1).trim()));
assertEquals("with multiple digits . and . dots", (s3.substring(s3.indexOf(".") + 1).trim()));