黑马程序员技术交流社区

标题: 两个问题,求解决,谢谢 [打印本页]

作者:  『无』尘    时间: 2013-11-20 02:31
标题: 两个问题,求解决,谢谢
public class Demo{
      public static void main(String[]args){
           String info = "**********";
           info = info.replaceFirst("\\*","#");
                   System.out.println(info);
          
          }

}

"\\*"需要两个\才可以通过编译器,之前毕老师的for循环里用*打三角形,前面一个转义字符\都没有,直接就是"*"
问题1:这和For循环里的*有什么不一样么
问题2:转义字符那视频里不是说“\"”就可以直接打印 " 么,这程序"\*"为什么仍不能通过编译,却需要打两个\\




作者: qw无语    时间: 2013-11-20 10:03
String replaceFirst(String regex, String replacement)
          使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的第一个子字符串。
info = info.replaceFirst("\\*","#");
第一个参数regex是一个正则表达式,而*在正则里面是表示零次或多次
而这里是要取第一个*,将他替换成#
而在正则里面\\ 反斜线字符 ,2个才是反斜线字符
作者: Jim-剣◆﹏    时间: 2013-11-20 10:23
本帖最后由 Jim-剣◆﹏ 于 2013-11-20 10:29 编辑

专门去查了API,这个方法
public String replaceFirst(String regex,String replacement)
参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换第一个匹配项的字符串
所以,参数1必须要符合正则表达式,不知道你学到正则没有
我假设你学了正则,那现在问题就变成了为什么"**********"的正则表达式是"\\*",下面详解
因为\*能得到*,但是\*里的那个斜杠,也需要转义才能得到一个斜杠,那么就是\\-->\,所以\*就需要两个\\了
至于之前毕老师那个,我相信你懂的,就是相当于打印字符串,不需要转义的,正则才有限定




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2