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"); } } } 

我在构buildWeb应用程序JSF的同时testing了它。 我只是想知道为什么在上面的代码temp.split(".")不起作用。 该声明,

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

在控制台上什么都不显示意味着它不通过循环。 当我将temp.split()方法的参数改变为其他字符时,它照常工作得很好。 可能是什么问题?

java.lang.String.split在正则expression式和. 在正则expression中意味着“任何angular色”。

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

关于split()的文档说:

将该string拆分为给定正则expression式的匹配。

(强调我的)

点是正则expression式语法中的特殊字符。 如果要将分割放在文字string模式上,请在参数上使用Pattern.quote()作为split():

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

该方法需要一个正则expression式,而不是一个string,并且该点在正则expression式中具有特殊意义。 像split("\\.")一样逃脱split("\\.") 。 你需要一个双反斜杠,第二个逃避第一个。

尝试:

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

方法是:

 String[] split(String regex) 

“” 是正则expression式中的保留字符

\\. 是简单的答案。 这里是你的帮助简单的代码。

 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]; } } 
  private String temp = "mahesh.hiren.darshan"; String s_temp[] = temp.split("[.]"); Log.e("1", ""+s_temp[0]); 

它工作正常。 你读过文档吗? 该string被转换为正则expression式。

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

与任何正则expression式特殊字符一样,您使用\转义。 您需要为Javastring转义添加一个\