5

我有

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 位数字

4

4 回答 4

11

您正在"."用作分隔符,您应该打破.char 的特殊含义。

正则表达式中的.char 是“任何字符”,因此您的拆分只是根据“任何字符”进行拆分,这显然不是您所追求的。

用作"\\."分隔符

有关预定义字符类的更多信息,您可以查看教程
有关常规正则表达式的更多信息(包括上述内容),您可以尝试本教程


编辑
PS 你在做什么(删除数字)可以用单线来实现,使用该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.”,因此请仔细考虑这是否确实是您所追求的。

于 2012-09-27T07:13:54.507 回答
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];
于 2012-09-27T07:13:45.507 回答
2

试试这个

String delimtor = "\\.";

“。” 对于正则表达式有特殊含义。

于 2012-09-27T07:15:38.307 回答
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()));
于 2012-09-27T07:20:58.940 回答