我想分割一个这样的字符串:
C:\Program\files\images\flower.jpg
但是,使用以下代码:
String[] tokens = s.split("\\");
String image= tokens[4];
我收到此错误:
11-07 12:47:35.960: E/AndroidRuntime(6921): java.util.regex.PatternSyntaxException: Syntax error U_REGEX_BAD_ESCAPE_SEQUENCE near index 1:
答案 0 :(得分:5)
尝试
String s="C:\\Program\\files\\images\\flower.jpg"
String[] tokens = s.split("\\\\");
在java(正则表达式世界)中\
是一个元字符。如果要将元字符视为普通字符,则应附加一个\或用\ Q \ E括起来。
下面是一些元字符
<([{\^-=$!|]})?*+.>
将以上列出的任何字符视为普通字符,您必须使用'\'将它们转义或将它们括在\ Q \ E
周围像:
\\\\ or \\Q\\\\E
答案 1 :(得分:2)
您需要与\\\\
分开,因为原始字符串应为\\
。请使用以下测试用例自行尝试:
@Test
public void split(){
String s = "C:\\Program\\files\\images\\flower.jpg";
String[] tokens = s.split("\\\\");
String image= tokens[4];
assertEquals("flower.jpg",image);
}
答案 2 :(得分:1)
解释字符串有两个级别,首先语言解析器使它成为"\"
,这就是正则表达式引擎看到的并且它是无效的,因为它是一个没有字符可以转义的转义序列。
因此您需要使用s.split("\\\\")
,以便正则表达式引擎看到\\
,这反过来意味着文字\
。
如果要在字符串文字中定义该字符串,则必须在那里转义反斜杠:
String s = "C:\\Program\\files\\images\\flower.jpg";
答案 3 :(得分:1)
String [] tokens = s.split(“\\\\”);
答案 4 :(得分:1)
试试这个:
String s = "C:/Program/files/images/flower.jpg";
String[] tokens = s.split("/");
enter code hereString image= tokens[4];
答案 5 :(得分:0)
原始输入文字应为
C:\\Program\\files\\images\\flower.jpg
而不是
C:\Program\files\images\flower.jpg
答案 6 :(得分:0)
这有效,
public static void main(String[] args) {
String str = "C:\\Program\\files\\images\\flower.jpg";
str = str.replace("\\".toCharArray()[0], "/".toCharArray()[0]);
System.out.println(str);
String[] tokens = str.split("/");
System.out.println(tokens[4]);
}