第13章 字符串

来源:互联网 发布:2017淘宝食品新规 编辑:程序博客网 时间:2024/04/28 08:00
1、对于字符串做参数时,传的是引用,在方法中如果对字符串有改变,都会创建一个新的对象。字符串具有只读属性,任何指向它的引用都不能改变它的值。
2、可以用StringBuilder构建字符串,他的toString()方法返回它的字符串。
3、格式化输出的常规语法是:%[arguement_index$][flags][width][.precision]conversion
arguement_index$:表示参数位置,即第几个参数
flags:标记,比如负号(左对齐,默认是右对齐)等
width:指明一个域的最小尺寸,Formatter通过添加空格实现
  .precision表示最大尺寸,它不像width,它并不能作用于所有对象,而且作用于不同的对象拥有不同的含义,比如作用于字符串表示最大长度,作用于浮点型表示小数位,不够的补0,不能作用于整数
可以用Formatter下的format方法输出,也可以用System.out.printf()或者System.out.format()方法输出
String.format()接收一个与Formatter.format()相同的参数,返回一个字符串,这是一个静态方法。
注意 的是当要转化为boolean输出是,对于java只要对象不为null,都返回true,即使是整数0,为null则返回false
4、for(byte b:data){System.out.printf("%05X",b);}
正则表达式
5、\s空白符 \S非空白符 \d数字0-9 \D非数字 \w单词[a-zA-Z0-9] \W非单词
6、?表示0个或1个,用在所修饰的字符后面
7、正则表达式用\\表示一个\
8、常用语法:
   Pattern p=Pattern.compiles(regex);
   Matcher m=p.matcher(s);
   m.matches();//返回boolean,是否完全匹配,即s是否是一个regex
此外可以:
while(m.find()){//返回boolean,字符串s中是否包含一个或多个regex。
System.out.println(m.start()+m.group()+(m.end()-1));  //group将打印匹配的子串 
}
另外需要说明:find(int index)表示从s中第index个字符开始匹配,即略过前index字符(index>=0)
正则表达式中()代表一组,比如ab(td([er])),第0组表示整个正则表达式,第一组是td([ere]),第二组是[er]
group(int i)代表匹配第i组(详见p302)
eg.String s="/*我是注释*/";
     String regex="/\\*(.*)\\*/";
     Matcher m=Pattern.compile(regex).matcher(s);
        while(m.find()){
            System.out.println(m.group(1));
        }//output:我是注释
9、另外Pattern有个静态方法matches(String regex, CharSequence input)
10、有一些标记比如(?i)忽视大小写,(?m)多行模式标记,你可以在regex前面直接添加,比如String regex="(?i)[ttr]";也可以Pattern.compile(regex,标记字段)
11、另外注意appendReplacement方法(详见jdk文档),它的典型用法是:
 Pattern p = Pattern.compile("cat");
 Matcher m = p.matcher("one cat two cats in the yard");
 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, "dog");
 }
 m.appendTail(sb);
 System.out.println(sb.toString());
12、需要注意的是,matches方法和find方法都会改变匹配器的状态,即匹配的位置,这个可以用reset()方法消除。带参数的reset(String s)方法改变要匹配的字符串。







0 0