构建字符串 有些时候,需要由较短的字符串构建字符串,例如,来自文件中的单词。采用字符串来达到此目的的效率较低。每次连接字符串时,都会构建一个新的String对象,既耗时,又浪费空间。使用StringBuffer类就可以避免这个问题的发生。如果需要用许多小段的字符串构建一个字符串,那么应按照下列步骤进行。首先,构建一个空的字符串构造器:
StringBuffer sb=new StringBuffer();当每次需要添加一部分内容时,就调用append方法。 例如:
sb.append(ch);//添加单个字符 sb.append(str);//添加一个字符串 ...在需要构建字符串是时就调用toString方法,将可以得到一个String对象,其中包含了构造器中的字符序列。
String completedString=builder.toString();提取子串 String类的substring方法可以从一个较大的字符串提取出一个子串。例如:
String h="Hello"; String s=h.substring(0,3);substring方法的第二个参数是不想复制的第一个位置。这里要复制位置为0、1和2(从0到2,包括2)的字符。在substring中从0开始计数,直到3为止,但不包含3。
substring的工作方法有一个优点:容易计算子串的长度。 代码示例如下:
import java.util.Scanner; public class 提取子串 { public static void main(String[] args) { Scanner s=new Scanner(System.in); String str=s.nextLine(); str=str.trim(); if(str.length()>=15) { System.out.println(str.substring(0, 12)+"......"); //截取从字符串第一个字符开始数规定长度外的字符,并让省略号将其代替。 }else { System.out.println(str); } System.out.println(str.substring(5)); //截取越界的字符串子串,并将其消除。 } }字符串的替换 replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的 意思,说白了也就是字符串);
replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\d", “*”)把一个字符串所有的 数字字符都换成星号; replaceAll(" “,” ")斜体样式;把字符串中的所有的空格替换成 (网页中空格的表示)。
相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想 替换第一次出现的,可以使用 replaceFirst(),这个方法也是基于规则表达式的替换。
但与replaceAll()不同的是,只替换第一次出现的字符串;
另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果 是一样的,即这两者也支持字符串的操作;
还有一点注意:执行了替换操作后,源字符串的内容是没有发生改变的.
匹配字符串之Pattern对象、Matcher对象和find方法 Pattern为模式对象,它规定了输入字符串的大体模式。而Matcher对象保存了与模式对象匹配的字符串的。将保存的字符串放入集合中,通过find()方法进行匹配。 代码如下:
import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public class RegexTest { @Test public void test3() { String str="google"; for(int i=0;i<str.length();i++) { String s=String.valueOf(str.charAt(i)); Pattern p=Pattern.compile(s); Matcher m=p.matcher(str); int count=0; while(m.find()) { count++; if(count>1) { break; } } if(count==1) {//这是找到的字符串,只匹配一次。 System.out.println(s); break; } } }编码问题
import java.io.UnsupportedEncodingException; public class 编码问题 { public static void main(String[] args) throws UnsupportedEncodingException { char c='A'; System.out.println((int)c); System.out.println((char)1); String str ="你好!"; //中文字符串是从国标码中对应出来的。 byte[] bs=str.getBytes("utf-8"); //可以将字符串转换成字节,也可以将字节转换成某种编码的字符串。 String s=new String(bs,"utf-8"); System.out.println(s); } }