String应用

1. StringUtils 中一共有130多个方法,并且是 static 的,调用 方式为StringUtils.xxx()

常用的方法如下:

  • public static boolean isEmpty(String str),为空的标准 str==null 或 str.length()==0。例子如下:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false **//注意在 StringUtils 中空格作非空处理**
StringUtils.isEmpty("   ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
  • public static boolean isNotEmpty(String str),是否非空,等于 !isEmpty(String str),示例如下:
  StringUtils.isNotEmpty(null) = false
  StringUtils.isNotEmpty("") = false
  StringUtils.isNotEmpty(" ") = true
  StringUtils.isNotEmpty("         ") = true
  StringUtils.isNotEmpty("bob") = true
  StringUtils.isNotEmpty(" bob ") = true
  • public static boolean isBlank(String str),是否为空或长度为0或由空白符 构成,下面是示例:
   StringUtils.isBlank(null) = true
      StringUtils.isBlank("") = true
      StringUtils.isBlank(" ") = true
      StringUtils.isBlank("        ") = true
      StringUtils.isBlank("\t \n \f \r") = true   //对于制表符、换行符、换页符和回车符
      StringUtils.isBlank()   //均识为空白符
      StringUtils.isBlank("\b") = false   //"\b"为单词边界符
      StringUtils.isBlank("bob") = false
      StringUtils.isBlank(" bob ") = false
  • public static boolean isNotBlank(String str)是否不为空且长度不为0且不由空白符(构成,等于 !isBlank(String str)
    下面是示例:
    StringUtils.isNotBlank(null) = false
    StringUtils.isNotBlank("") = false
    StringUtils.isNotBlank(" “) = false
    StringUtils.isNotBlank(” “) = false
    StringUtils.isNotBlank(”\t \n \f \r") = false
    StringUtils.isNotBlank("\b") = true
    StringUtils.isNotBlank(“bob”) = true
    StringUtils.isNotBlank(" bob ") = true

1.2 String的常用方法

java字符串不能分开在两行中写。如果一个字符串太长,需要将这个字符串在两行上书写,可以使用“+”将两个字符串连起来,并在加好前换行。
只用“+ 运算符的一个操作类型是字符串,编译器就会将两外的操作类型转换成字符串形式。
package com.xingyun.tiaojianyuju;
public class Link {
	public static void main(String[] args) {
		int booktime = 4;
		float practice = 2.5f;
		System.out.println("我每天花费" + booktime + "小时看书" 
				+ practice + "小时上机练习");
	}
}
我每天花费4小时看书2.5小时上机练习
别人让你看到了什么,你的能力又能让你自己看到了什么。又判断力的头脑比盲目的眼睛更为重要。
str.length获取字符串的长度
str.indexOf(str,int)查找字符串第一次出现的位置。【-1表示没有检索到字符串s】,返回-1
str.subString(start,end)截取字符串。【从start位置开始,到end位置结束,不包括end位置的字符】
str.charAt(int index)获取指定索引位置的字符【空格也占一个字符】
str.trim()去掉字符串的前导/尾部空格【中间的一个空格并没有去除】
StringTokeniizer(String str, String delim)去除字符串中的所有空格【使用的是分割的原理】
str.replaceAll(str的字符串,str要代替的字符串)替换所有字符串
replace(str的字符串,str要代替的字符串)替换所有与指定字符串相匹配的字符串
replaceFirst(str的字符串,str要代替的字符串)替换第一个出现的指定字符串,而后面出现的字符串不做替换【str的字符串的大小写有严格要求,错了不能做替换处理】
==比较的是内存位置,不适宜用来比较字符串
equals()比较两个字符串内容必须完全一样
str.startsWith(String prefix)判断当前字符串对象是否以参数指定的字符串开始
str.split(String sign)sign是分割符或者正则表达式
str.split(String sign,int limit分割的份数)如果定义多个分割符,可使用符号“
Character.isDigit()判断是否是数字
package com.xingyun.tiaojianyuju;
import java.util.StringTokenizer;
public class Link {
	public static void main(String[] args) {
		String s = " xiaobaibai hello";
		StringTokenizer tokenizer = new StringTokenizer(s," ");
		StringBuffer buffer = new StringBuffer();
		int i = 1;
		//判断一下字符串是否还有空格
		while(tokenizer.hasMoreTokens()){
			i++;
			buffer.append(tokenizer.nextToken());
		}
		System.out.println(buffer.toString());
	}
}
//spilt的分割使用
public static void main(String[] args) {
		String s = "xiaobaibai,hello,小白白";
		String[] split = s.split(",");
		for (int i = 0; i < split.length; i++) {
			System.out.println(split[i]);
		}
	}
public static void main(String[] args) {
		String s = "无言独上西楼,月如钩,寂寞梧桐深渊锁清秋。剪不断、里不乱、是离愁,";
		String[] split = s.split(",|。");
		for (int i = 0; i < split.length; i++) {
			System.out.println(split[i]);
		}
	}

2 格式化字符串

格式化字符串主要包括日期格式化、时间格式化、日期/时间组合的格式化和常规类型格式化。

2.1 日期格式化

format(String format,Object —args)通过给定的特殊转换符作为参数 来实现日期和时间的格式化
format(Local I,String format,Object —args)I为null的时候不进行本地格式化

在这里插入图片描述

public static void main(String[] args) {
		Date today = new Date();
		String a = String.format(Locale.US, "%tb",today);
		System.out.println("月份的缩写:" + a);
		String b = String.format(Locale.US, "%tB",today);
		System.out.println("月份的全写:" +b);
		String c = String.format( "%ta",today);
		System.out.println("星期的缩写:" +c);
		String d = String.format( "%tA",today);
		System.out.println("星期的全写:" +d);
		String e = String.format( "%tY",today);
		System.out.println("年份的全写:" +e);
		String f = String.format( "%ty",today);
		System.out.println("年份的缩写:" +f);
		String h = String.format( "%tm",today);
		System.out.println("月份:" +h);
		String g = String.format( "%tj",today);
		System.out.println("一年的第几天:" +g);
		String k = String.format( "%td",today);
		System.out.println("一个月的第几天:" +k);
		String l = String.format( "%te",today);
		System.out.println("一个月的第几天:" +l);
	}

2.2.时间格式化

在这里插入图片描述

public static void main(String[] args) {
		Date date = new Date();
		System.out.println("24小时两位数至:"+String.format("%tH", date));
		System.out.println("12小时两位数至:" + String.format("%tI", date));
		System.out.println("24小时一位数至:" + String.format("%tk", date));
		System.out.println("12小时一位数至:" + String.format("%tl", date));
		System.out.println("分钟:" + String.format("%tM", date));
		System.out.println("秒:" + String.format("%tS", date));
		System.out.println("上午或者下午:" + String.format("%tp", date));
	}

2.3 时间/日期格式

在这里插入图片描述

public static void main(String[] args) {
		Date date = new Date();
		System.out.println("默认年份:"+date);
		System.out.println("年-月-日(4位年份):" + String.format("%tF", date));
		System.out.println("月/日/年(2位年份):" + String.format("%tD", date));
		System.out.println("全部日期和时间信息:" + String.format("%tc", date));
		System.out.println("时:分:秒 PM(AM)12小时制:" + String.format("%tr", date));
		System.out.println("时:分:秒 24小时制:" + String.format("%tT", date));
		System.out.println("时:分 24小时制:" + String.format("%tR", date));	
	}

2.4 常规类型格式化

在这里插入图片描述

	public static void main(String[] args) {
		System.out.println("十六进制:"+String.format("%d", 400/2));
		System.out.println("3>5:"+String.format("%b", 3>5));
		System.out.println("十六进制"+String.format("%x", 200));
	}

转换货币的例子

package com.xingyun.tiaojianyuju;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;
/*
 * 将数字转换为不同国家或地区的货币格式
 * @author Administrator
 *
 */
public class FormatNumber {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		double d = input.nextDouble();
		System.out.println("local 类的常量作为构造参数获得不同的货币格式:");
		NumberFormat instance = NumberFormat.getCurrencyInstance(Locale.CHINA);
		System.out.println(instance.format(d));
		NumberFormat instance1 = NumberFormat.getCurrencyInstance(Locale.US);
		System.out.println(instance1.format(d));
	}
}
结果如下:
请输入一个数字:
156
local 类的常量作为构造参数获得不同的货币格式:
¥156.00
$156.00

3 正则表达式

3.1正则表达式的元字符

在这里插入图片描述

package com.xingyun.digui;
/**
 * 字符串由7个字符组成,并且第一位必须是大写字母,2-4位必须是小写字母,后3位必须是数字字符
 * @author Administrator
 *
 */
public class Decision {
	public static void main(String[] args) {
		String s1 = "Mrkj007";
		boolean matches = s1.matches("\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\d\\d\\d");
		System.out.println(matches);
	}
}
true

3.2 正则表达式的限定符

在这里插入图片描述

public static void main(String[] args) {
		String s1 = "Mrkj007";
		boolean matches = s1.matches("\\p{Upper}\\p{Lower}{3}\\d{3}");
		System.out.println(matches);
	}
//判断是否是邮箱的形式
public static void main(String[] args) {
		String s1 = "sdf23@qq.com";
		boolean matches = s1.matches("\\w{0,}\\@{1}\\w{0,}\\.{1}\\w{0,}");
		System.out.println(matches);
	}

3.3 方括号中元字符的含义

在这里插入图片描述

//判断是否是手机号
public static void main(String[] args) {
		String s1 = "18700492836";
		boolean matches = s1.matches("1[3,5,7,8,9]\\d{9}$");
		System.out.println(matches);
	}
//判断是否是IP地址
public class Decision {
	public static void main(String[] args) {
		String ip = "192.168.91.1";
		System.out.println(matches(ip));
	}
	public static String matches(String text) {
		if (text != null && !text.isEmpty()) {
			String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d[1-9])\\."
					      +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
					      +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
					      +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
			if (text.matches(regex)) {
				return "是一个合法的IP地址";
			}else {
				return "不是一个合法的IP 地址";
			}
		}
		
		return "请输入要验证的IP地址!";
	}
}
输出结果:是一个合法的IP地址
//计算文章中的汉字个数
public static void main(String[] args) {
		String text = "喜欢小白白 gg 更改";
		int amount = 0;
		for (int i = 0; i < text.length(); i++) {
			//使用正则表达式判断字符是否属于汉字编码
			boolean matches = Pattern.matches("^[\u4E00-\u9FA5]{0,}$", ""+text.charAt(i));
			if (matches) {
				amount++;
			}
		}
		System.out.println("共有" + amount + "个汉字");
	}
输出结果是:共有7个汉字

4 字符串生成器-StringBuilder

特点:是一个可变字符序列,在字符串缓存被单个线程使用时要比StringBuffer类快,用于多个线程是不安全的。
String 与StringBuilder做更新操作时所用时间的差别。

public static void main(String[] args) {
		String str = "";
		long strTime = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			str+=i;
		}
		long endTime = System.currentTimeMillis();
		System.out.println("String消耗时间:"+(endTime-strTime));
		
		StringBuilder builder = new StringBuilder("");
		long startTime = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			builder.append(i);
		}
		long endT = System.currentTimeMillis();
		System.out.println("StringBuilder消耗时间为:"+(endT-startTime));
	}
测试结果:
String消耗时间:48243
StringBuilder消耗时间为:15

4.2 常用的方法

build.append(String str)将str追加到StringBuilder【可以实现任何类型数据追加,如int/boolean/char等】
append(StringBufffer sb)j将sb字符串缓存的值追加到字符串生成器中
insert(int offset,String str)j将str添加到指定的offset索引位置
delete(int start,String end移除字符串中的子字符串
toString()将字符串生成器转换位字符串
//insert方法
public class Subo {
	public static void main(String[] args) {
		String s = "cat";
		StringBuilder builder = new StringBuilder("fish");
		builder.insert(2, s);
		System.out.println(builder);
	}
}
结果:
ficatsh
//delete
public static void main(String[] args) {
		String s = "cat";
		StringBuilder builder = new StringBuilder("fishloveyou");
			builder.delete(3, 5);
		System.out.println(builder);
	}
结果:
fisoveyou
package com.xingyun.digui;
/**
 * 将汉字和字母转换位Unicade编码
 * @author Administrator
 *
 */
public class Subo {
	public static void main(String[] args) {
		String s = "fish dont't love cat ";
		char[] c = s.toCharArray();
		StringBuilder builder = new StringBuilder();
			for (char d : c) {
				builder.append((int)d+" ");
			}
		System.out.println(builder.toString());
	}
}
输出结果:102 105 115 104 32 100 111 110 116 39 116 32 108 111 118 101 32 99 97 116 32 

典型案例

/**
 * 去掉字符串中重复的字符
 */
public class SBDelete {
	public static void main(String[] args) {
		String s = "命运如同海风一吹着青春的舟,飘摇的,曲折的,度过了时间的海!";
		StringBuilder builder = new StringBuilder(s);
		for (int i = 0; i < builder.length(); i++) {
			for (int j = i+1; j < builder.length(); j++) {
				if (builder.charAt(i) ==builder.charAt(j) ) {
					builder.deleteCharAt(j);
				}
			}
		}
		System.out.println(builder);
	}
}
输出结果:
命运如同海风一吹着青春的舟,飘摇曲折度过了时间!
/**
 * 实现字符串加密
 * 将字符串转换成字节数组,再将每个字节和密文字符异或操作进行加密
 * 做相反运算就可以进行解密
 *
 */
public class EncryptUncrypt {
	public static void main(String[] args) {
		String value = "大鱼你好吗";
		char secret ='嗯';
		String u = EncryptUncrypt.EAndU(value, secret);
		System.out.println("加密后的值为:" + u+" ");
		System.out.println("解密码后的值为:a"+EncryptUncrypt.EAndU(u, secret));
	}
	public static String EAndU(String value,char secret) {
		byte[] bs = value.getBytes();
		for (int i = 0; i < bs.length; i++) {
			//进行异或运算进行加密
			  bs[i]= (byte)(bs[i]^(int)secret);		
		}
		return new String(bs,0,bs.length);
	}
}
输出结果:
加密后的值为:
KH^SRO
JR
x 
解密码后的值为:a大鱼你好吗
/**
 * 验证字符串是否回文。只要 测试反转后的文字的下标是否跟之前的相等就可以了
 *
 */
public class StringB {
	public static void main(String[] args) {
		String str = "你爱你呀";
		StringBuilder b = new StringBuilder(str);
		b.reverse();
		int count=0;
		 for (int i = 0; i <  b.length(); i++) {
			if (str.charAt(i)!=b.charAt(i)) {
				System.out.println("字符串不回文");
				break;
			}
			if (str.charAt(i)==b.charAt(i)) {
				count++;
			}
		}
		 if (count==str.length()) {
			System.out.println("字符串回文");
		}
	}
}
输出结果:字符串不回文

练习题:指定字符在已知的字符串里面的个数

package com.mybatis.bean;

public class Star {
		public static void main(String[] args) {
			String str="You are the best for me , thank you .You are as warm as the sunset glow."
					+ "Live a good life meet slowly."
					+ "want to be well known joy."
					+ "If you can dream it,yo can do it.Fortunately,I love to laugh,life is not so bad."
					+ "Be thankful and be gentle.Always gentle,always tearful.aaaaa";
			char[]string=str.toCharArray();
			char a='a';
			int count=0;
			for (int i = 0; i <string.length; i++) {
				if (a==string[i]) {
					count++;
				}
			}
			System.out.println(count);
		}
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值