【JAVA】字符串的构建、替换,子串的提取,Pattern对象、Matcher对象和find方法

构建字符串
有些时候,需要由较短的字符串构建字符串,例如,来自文件中的单词。采用字符串来达到此目的的效率较低。每次连接字符串时,都会构建一个新的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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-_星耀_-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值