用'。'拆分Java字符串。

时间:2012-09-27 07:12:11

标签: java

我有

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 个答案:

答案 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()));