public static void main(String[] args) {
String s = "a";
s = s.replaceAll(".", "\\");
}
以上程序报错如下:
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
请问是什么原因?谢谢!
6 个解决方案
#1
replaceAll的参数就是regex,是正则表达式,首先会转义,所以报错。
把程序改为下面就可以了
把程序改为下面就可以了
public static void main(String[] args) {
String s = "a";
s = s.replaceAll(".", "\\\\");
}
#2
java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠
例如 str1="aa\bbb"; str2="aa'bbb";
要想替换成 str1="aa\\bbb";str2="aa\'bbb";
必须这样替换:
str1 = str1.replaceAll("\\\\", "\\\\\\\\");
str2 = str2.replaceAll("'", "\\\\'");
原因如下:
String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的,
\\\\ ,java解析为\\交给正则表达式, 正则表达式再经过一次转换,把\\转换成为\
也就是java里面要用正则来表示一个\. 必须写成4个\
如果要表示\\,那就要写8个\
所以如果写成: str1 = str1.replaceAll("\\", "\\\\");
就会报正则表达式的错误。
例如 str1="aa\bbb"; str2="aa'bbb";
要想替换成 str1="aa\\bbb";str2="aa\'bbb";
必须这样替换:
str1 = str1.replaceAll("\\\\", "\\\\\\\\");
str2 = str2.replaceAll("'", "\\\\'");
原因如下:
String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的,
\\\\ ,java解析为\\交给正则表达式, 正则表达式再经过一次转换,把\\转换成为\
也就是java里面要用正则来表示一个\. 必须写成4个\
如果要表示\\,那就要写8个\
所以如果写成: str1 = str1.replaceAll("\\", "\\\\");
就会报正则表达式的错误。
#3
不久之前看到的,具体链接在这http://bbs.csdn.net/topics/200023433
#4
看来我的解释还不到位额,+1
#5
#6
正则表达式中\\表示\
而java语言中\\表示字符\,因此表示两个\\就要用\\\\
而java语言中\\表示字符\,因此表示两个\\就要用\\\\
#1
replaceAll的参数就是regex,是正则表达式,首先会转义,所以报错。
把程序改为下面就可以了
把程序改为下面就可以了
public static void main(String[] args) {
String s = "a";
s = s.replaceAll(".", "\\\\");
}
#2
java replaceAll() 方法要用 4 个反斜杠,表示一个反斜杠
例如 str1="aa\bbb"; str2="aa'bbb";
要想替换成 str1="aa\\bbb";str2="aa\'bbb";
必须这样替换:
str1 = str1.replaceAll("\\\\", "\\\\\\\\");
str2 = str2.replaceAll("'", "\\\\'");
原因如下:
String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的,
\\\\ ,java解析为\\交给正则表达式, 正则表达式再经过一次转换,把\\转换成为\
也就是java里面要用正则来表示一个\. 必须写成4个\
如果要表示\\,那就要写8个\
所以如果写成: str1 = str1.replaceAll("\\", "\\\\");
就会报正则表达式的错误。
例如 str1="aa\bbb"; str2="aa'bbb";
要想替换成 str1="aa\\bbb";str2="aa\'bbb";
必须这样替换:
str1 = str1.replaceAll("\\\\", "\\\\\\\\");
str2 = str2.replaceAll("'", "\\\\'");
原因如下:
String 的 replaceAll() 方法,实际是采用正则表达式的规则去匹配的,
\\\\ ,java解析为\\交给正则表达式, 正则表达式再经过一次转换,把\\转换成为\
也就是java里面要用正则来表示一个\. 必须写成4个\
如果要表示\\,那就要写8个\
所以如果写成: str1 = str1.replaceAll("\\", "\\\\");
就会报正则表达式的错误。
#3
不久之前看到的,具体链接在这http://bbs.csdn.net/topics/200023433
#4
看来我的解释还不到位额,+1
#5
#6
正则表达式中\\表示\
而java语言中\\表示字符\,因此表示两个\\就要用\\\\
而java语言中\\表示字符\,因此表示两个\\就要用\\\\