1. 首先:String对象是不可变的,String类中的每一个看起来会修改String值的方法,实际上是创建了一个全新的String对象,以包含修改过后的字符串的内容,最初的String对象丝毫未动
  2. 在用“+”循环拼接字符串的时候,编译器会循环创建StringBuilder,导致缓存很多,因此遇到复杂字符串时,应该自定义一个StringBuider来自己添加,
  3. StringBuilder是在javaSE5引入的。这之前是StringBuffer。StringBuffer是线程安全的,但是开销要大
  4. 类似于C语言中的格式化输出 System.out.format(“%s %d”,x,y);
  5. Fomatter 类。
  1. Java中一般新的格式化功能都会使用Java.util.Fomatter类,可将此类看作一个翻译器,将格式化字符串与数据翻译成需要的结果
  2. 使用:Fomatter f = new Fomatter(System.out); 传递的参数是接受输出的目的地。一般都是使用System.out作为其目的地。 f.formate(“ThiS is a %s %d”,x,y);便会将数据输出到目的地。
  3. 格式化说明符使用方法,Fomatter转化见API
  1. String.format()  是一个static方法。接受与创建完成后的Fomatter对象一样的参数。但是其返回一个String对象。其实,在其内部也是创建一个Formatter对象。String.format()可以将二进制文件转换为16进制来展示。
  2. 正则表达式
  1. 首先在Java中 匹配数字用的是 \\d+ 而不是 python中的 \d+,在java中\\的意思是”我要插入一个正则表达式的反斜线,所以其后的字符由特殊的意义。“
  2. 可以使用String内置功能来检验某字符串是否符合正则表达式使用”Some Strings”.matches(‘Some regex”);来检查该字符串是否符合参数的正则表达式,返回布尔值。
  3. String的split()方法,用来将字符串从正则表达式匹配的地方切开。Arrays.toString(someStrings.spilt(“some regexs”));将某一字符串按正则表达式切开后,转换为String。
  4. String的 replaceFirst() 以及 replaceAll()方法。第一个为替换正则表达式匹配的第一个地方,第二个则是替换正则表达式匹配的所有的地方。
  1. 正则表达式的强有力工具:Pattern 以及 Matcher
  1. Pattern p = new Pattern.compile(“some regex”);  Matcher m = p.matcher(“your String”);使用Pattern的static方法compile,传入自己编写的正则表达式。他会根据传入的String类型的正则表达式,生成一个Patter对象。然后将要检索的字符串传入Pattern对象的matcher()方法。返回一个Matcher对象。它有很多功能,可以将所匹配的字符串进行很多操作。
  2. Matcher对象的方法。matches()用来判断整个输入字符串是否匹配正则表达式。lookingAt()用来判断该字符串(不必是整个字符串)的始部分是否能后匹配模式。find()方法用来查找多个匹配。
  3. 组:用括号划分的正则表达式,可以根据组的编号来引用某个组。组号为0表示整个表达式。组号为1表示第一队括号括起来的组。依次类推。 A(B(C))D 组0是ABCD,组1是BC,组2 是C。
  4. Matcher对象有很多方法来获取和操作组信息。Public int groupCount()返回该匹配其的模式中的分组数目,但是第0组不包括在内。Public String group()返回前一次匹配操作(例如find())的第0组(整个匹配)。Public String group(int i)返回在前一次操作匹配期间指定的组号,如果匹配成功,但是指定的组没有匹配输入字符串的任何部分,则将返回null。Public int start(int group)返回再前一次匹配操作中寻找到的组的起始索引。Public int end(int group)返回在前一次匹配操作中寻找到的组的最后一个字符所用加一的值。
  5. Partten类的compile()方法还有另一个版本,它接受一个标记参数,调整匹配行为。标记参数可以自行百度。太多不一一列举。
  6. Pattern.compile(regex).split(input) 将输入字符串断开成字符串对象数组,断开边界由正则表达式确定。
  1. 通过正则表达式来替换字符串中的文本
  1. String  s = “your string”; s = s.replaceFirst(your regex,replacement);以参数字符串replacement替换掉正则表达式第一个匹配成功的部分。
  2. String  s = “your string”; s = s.replaceAll(your regex,replacement);以参数字符串replacement替换掉正则表达式所有匹配成功的部分。
  3. appendReplacement(StringBuffer sbuf,String replacement):执行渐进式的替换,而不是像replaceFirst()和replaceAll()那样只替换第一个匹配或者全部匹配。它允许你调用其他方法来生成或处理replacement
  4. appendTail(StringBuffer sbuf),在执行一次或多次appendReplacement()之后,调用此方法可以将输入字符串余下部分复制到sbuf中。
  1. Scanner类
  1. 构造器可以接受任何类型的输入对象。包括File对象,InputStream,String或者Readable对象。
  2. Scanner对象使得所有的输入,分词以及翻译的操作都隐藏在不同类型的next方法中。普通的next()方法返回下一个String。所有的基本类型(除char之外)都有对应的next()方法。包括BigInteger和BigDecimal。所有的next方法,只有在找到一个完整的分词之后才会返回。Scanner还有相应的hasNext()方法。用以判断下一个输入分词是否所需类型。
  3. 定界符:默认情况下Scanner会根据空白字符队输入进行分词。但是可以通过正则表达式来指定自己所需的定界符。Scanner scanner = new Scanner(“12,45,78,88,99,42”); scanner.useDelimiter(“\\s*,\\s*”);  通过使用useDelimiter()来设置定界符,同时还有一个delimiter()方法,用来返回当前正在作为定界符使用的Pattern对象。