A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

付蛟龙

注册黑马

  • 黑马币:0

  • 帖子:23

  • 精华:0

© 付蛟龙 注册黑马   /  2012-7-5 00:22  /  2152 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 付蛟龙 于 2012-7-8 18:27 编辑

/*
以.为标记 把字符串分割成字串
*/
1.    public class  getLastname
2.    {
3.         public static void main(String[] args)
4.        {
5               String s1="abc.txt";
6              String[] s2=s1.split("."); //分割字符串
7
8              for(int x=0; x<s2.length; x++)      
9                  System.out.println(s1[x]);// 打印子串;
10        }
11   }
   这是个很简单很基础的字符串小程序,目的是以.将字符串s1分为若干子串,并打印出来。但上述代码编译 形成class文件执行后无任何输出。在第九行加入System.out.println(s2.length);  打印字符串数组长度 发现为0.说明第六行并未执行,  然后将第六行改为String[] s2=s1.split("\\.");  程序运行正常 并得到想要的结果

我的问题是 为什么会这样? 是不是与转义字符有关?菜鸟求解

3 个回复

正序浏览
因为  “.”是转义字符,所以要加“\\”
还有其他的一些加\\的。如下,希望这些能帮助你

1、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
2、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or");
使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。
我们看jdk doc中说明

public String[] split(String regex)  Splits this string around matches of the given regular expression.  参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码:

用竖线 | 分隔字符串,你将得不到预期的结果

    String[] aa = "aaa|bbb|ccc".split("|");
    //String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能得到正确的结果

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

    String[] aa = "aaa*bbb*ccc".split("*");
    //String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果   

    for (int i = 0 ; i <aa.length ; i++ ) {
      System.out.println("--"+aa[i]);
    }

显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。

"|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。

还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
后面那个是链接 楼主赋值一下看吧
回复 使用道具 举报
网上找的
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
  
public class test {  
  
    /**
     * @param args
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        String textString = new String ("\\\"");  
         
        Pattern pt=Pattern.compile("\\\\\"");  
         
        Matcher mc=pt.matcher(textString);  
         
             mc.replaceAll("xx");  
         
        //textString.replaceAll("\\", "xx");  
         
        String bl=mc.replaceAll("xx");  
         
        System.out.println(textString);  
        System.out.println(bl);  
        }  
  
}  


分析一下“\\\\”,第一个斜杠是转义符,第二个斜杠是斜杠本身,第三个斜杠是转义符,第四个斜杠是斜杠本身。

有2点要清楚:
1.字符串里面表示斜杠就需要两个斜杠如“\\”
2.正则表达式里的斜杠需要转意,是用“\\”标示。
这样就比较好解释:
我们先要表示正则表达式里面的斜杠“\\”,然后再用字符串表示出来。而这2个斜杠分别需要一个转义符,这样就成了4个斜杠在正则表达式里面表示一个斜杠。  原来是这样!
http://www.iteye.com/wiki/problem/13730
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马