Java中的split()方法对点(.)不起作用。

我准备了一个简单的代码片段,以便从我的web应用程序中分离错误的部分。

public class Main {


public static void main(String[] args) throws IOException {
System.out.print("\nEnter a string:->");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp = br.readLine();


String words[] = temp.split(".");


for (int i = 0; i < words.length; i++) {
System.out.println(words[i] + "\n");
}
}
}

我在构建web应用程序JSF时对它进行了测试。我只是想知道为什么在上面的代码temp.split(".")不工作。声明,

System.out.println(words[i]+"\n");

在控制台上不显示任何内容意味着它不经过循环。当我将temp.split()方法的参数更改为其他字符时,它照常工作。有什么问题吗?

215780 次浏览

它工作得很好。你读过的文档吗?字符串转换为正则表达式。

.是匹配所有输入字符的特殊字符。

与任何正则表达式的特殊字符一样,使用\进行转义。你需要一个额外的\来进行Java字符串转义。

试一试:

String words[]=temp.split("\\.");

方法是:

String[] split(String regex)

"."是正则表达式中的保留字符

java.lang.String.split在正则表达式上拆分,并且正则表达式中的.表示“任何字符”。

temp.split("\\.")试试。

split()的文档说:

围绕给定正则表达式的匹配来拆分此字符串。

(强调我的。)

点是正则表达式语法中的一个特殊字符。如果你希望split是一个字面值字符串模式,使用Pattern.quote()对参数进行split():

String[] words = temp.split(Pattern.quote("."));

该方法接受一个正则表达式,而不是字符串,并且点在正则表达式中具有特殊含义。像split("\\.")那样转义它。你需要一个双反斜杠,第二个转义第一个。

    private String temp = "mahesh.hiren.darshan";


String s_temp[] = temp.split("[.]");


Log.e("1", ""+s_temp[0]);

\\.是简单的答案。下面是一些简单的代码。

while (line != null) {
//
String[] words = line.split("\\.");
wr = "";
mean = "";
if (words.length > 2) {
wr = words[0] + words[1];
mean = words[2];


} else {
wr = words[0];
mean = words[1];
}
}