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转义添加一个\
。