构建字符串
有些时候,需要由较短的字符串构建字符串,例如,来自文件中的单词。采用字符串来达到此目的的效率较低。每次连接字符串时,都会构建一个新的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(" “,”%20")斜体样式;把字符串中的所有的空格替换成%20(网页中空格的表示)。
相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想
替换第一次出现的,可以使用 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);
}
}