使用'.'分割Java字符串

5

I have

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


3
Split函数需要一个正则表达式,而"."具有特殊含义。 - assylias
For语句看起来很奇怪。你是不是指for (int k=0; k < gg; k++) - Javier
4个回答

11
你正在使用"."作为分隔符,你应该打破.字符的特殊含义。
在正则表达式中,.字符表示“任何字符”,所以你的拆分只是按照“任何字符”进行拆分,这显然不是你想要的。
请使用"\\."作为分隔符。
有关预定义字符类的更多信息,请查看教程
有关正则表达式的更多信息(包括上述内容),请尝试此教程

编辑
附言:您要做的事情(删除数字)可以通过一行代码实现,使用 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"这样的字符串 - 它将提供"this is a test",并且也会删除"2.",所以请仔细考虑是否确实需要这样。

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];

我得到了这个异常信息:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException,我需要考虑什么? - The Learner

2

试试这个

String delimtor = "\\.";

“.”在正则表达式中有特殊含义。”

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接