开发中经常使用的字符串,做下汇总梳理
一,length,index of, subString
@Test
public void testUserInfo() {
// 一,截取字符串功能
String name = "ABCDEFG";
//获取字符串的长度
int length = name.length();
System.out.println("length" + length);
//length 7
//返回指定字符在此字符串中第一次出现处的索引
int index = name.indexOf("F");
System.out.println("index索引" + index);
//index索引 5
//从指定位置开始截取字符串,默认到末尾。
String substring = name.substring(2);
System.out.println("substring" + substring);
//CDEFG
String substring1 = name.substring(2, length);
System.out.println("substring1" + substring1);
//1CDEFG
}
二,equals,contains, endwith, startWith,empty
@Test
public void test2() {
String firstName = "abc";
String secondName = "abc";
String thirdName = "ABC";
boolean equals = firstName.equals(secondName);
System.out.println("equals = " + equals);//equals = true
boolean equals1 = firstName.equals(thirdName);
System.out.println("equals1 = " + equals1);//equals1 = false
boolean b = firstName.equalsIgnoreCase(thirdName);
System.out.println("忽略大小写 " + b);//忽略大小写 true
boolean a = firstName.contains("a");
System.out.println("a = " + a);//a = true
boolean abce = firstName.contains("abce");
System.out.println("abce = " + abce);//abce = false
// //判断字符串是否以传递进来的字符串开头
boolean a1 = firstName.startsWith("a");
System.out.println("a1 = " + a1);
//判断字符串是否以传递进来的字符出结尾
boolean b1 = firstName.endsWith("b");
System.out.println("b1 = " + b1);
//判断字符串的内容是否为空
boolean empty = firstName.isEmpty();
System.out.println("empty = " + empty);
}
三,string 转化为字符串数组,转大写,转小写,replace替换,trim 前后去除空格
@Test
public void test3() {
String answers = "ABCD";
char[] chars = answers.toCharArray();
System.out.println("chars = " + chars);
// char[] chars = answer.toUpperCase().toCharArray();
Arrays.sort(chars);//排序
String s = answers.toLowerCase();//转小写
System.out.println("s = " + s);
String s1 = answers.toUpperCase(); //转答谢
System.out.println("s1 = " + s1);
char[] chars1 = answers.toUpperCase().toCharArray();
System.out.println("chars1 = " + chars1);
//替换
//将指定字符进行互换
String name = " 小红帽 ";
String secondName = "大红帽";
String replace = name.replace(name, secondName);
System.out.println("replace result = " + replace);
// 去除两端空格
String trim = name.trim();
System.out.println("name = " + name);
System.out.println("trim = " + trim);
}
四,字符串到数值转化
@Test
public void convertStr() {
int age = 12;
String ageStr = age + "";
///使用String类的静态方法,只产生一个String对象
String secondAgeStr = String.valueOf(age);
String thirdAgeStr = Integer.toString(age);
//字符串转化int
String userId = "13";
Integer firstUserId = Integer.valueOf(userId);
//直接使用静态方法,不会产生多余的对象
int secondUserId = Integer.parseInt(userId);
}
五 ,equals
@Test
public void test5() {
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(" equalsS1= " + s1.equals(s2));//true
System.out.println("s1==s2 = " + s1 == s2);//false
}
六,spilt
经常分给字符串来使用
@Test
public void testSpilt() {
String questionIds = "1,2,3,3,4";
List<String> collect = Arrays.stream(questionIds.split(",")).collect(Collectors.toList());
System.out.println("split = " + collect);//split = [1, 2, 3, 3, 4]
//有些特殊符号需要用 反斜杠 \ 转义,在Java要用两个反斜杠 \\
String s = "aa|bb|cc";
String[] strArray = s.split("\\|");
for (int i = 0; i < strArray.length; i++) {
System.out.print("单个字符串" + strArray[i]);
}
// 单个字符串aa 单个字符串bb 单个字符串cc
}
七,string.format()
string.format()函数用来对字符串进行加工,得到我们想要的字符串,string.format(String format, Object… args) ,第一个参数,是要格式化拼接内容,object…是多个拼接参数。常用的有 %s 和%d
%是格式化输入接受参数的标记
@Test
public void test1() {
// string.format()函数用来对字符串进行加工,得到我们想要的字符串
//string.format(String format, Object... args) ,第一个参数,是要格式化拼接内容,object...是多个拼接参数
// %s 是字符串类型,%d 是十进制整数
String reason = "本次申请因“%s”被驳回";
//String.join()
String hello = String.format("hello,%s", "中秋快乐!");
logger.info("打招呼信息:{}", hello);
//打招呼信息:hello,中秋快乐!
String returnReason = String.format(reason, "字写的丑");
logger.info("退回原因:{}", returnReason);
//退回原因:本次=申请因“字写的丑”被驳
double n = 3.1415926;
String fNum = String.format("%f%n", n);
logger.info("fNum结果是:{}", fNum);
logger.info(String.format("我叫%s,她叫%s", "小明", "小方")); // 我叫小明,她叫小方
}
有个需求,递增生成六位的学生学号,不够六位的使用0 补充,可以使用%06d : %是格式化输入接受参数的标记
0格式化命令:结果将用零来填充
6:填充位数
d:代表十进制 数据
@Test
public void testUser() {
String format = String.format("%06d", 112);
System.out.println("format = " + format);//000112
}
八,String.join()
/**
* 字符串拼接
*/
@Test
public void testJoin() {
//join 串联集合
ArrayList<String> nameList = Lists.newArrayList("小红", "小明", "小花");
String joinNames = String.join("-", nameList);
logger.info("拼接结果是:{}", joinNames);
// 拼接结果是:小红-小明-小花
//串联多个对象
String hello = String.join(":", "你好", "我也好");
logger.info("hello:{}", hello);
//hello:你好:我也好
String happy = joiner("-", "我好开心", "我好难过");
logger.info("happy:{}", happy);
//happy:我好开心-我好难过
}
九,StringUtils 中的isEmpty 和isBlank 判空操作
isEmpty 方法
只有当字符串非null非空串(”“)的时候才返回true
isBlank 方法
首先传入的参数是null或者空字符串的时候会返回true,接下来是通过Character.isWhitespace方法判断字符是否全部是空白字符(空格、tab键、换行),如果是就返回false,否则返回true;isNotBlank方法跟isBlank方法相反
/**
* isEmpty 判断条件是: cs == null || cs.length() == 0;
* isBlank 除了 cs == null || cs.length() == 0 还增加了对空白字符串的判读,更加严格
* isWhitespace() 方法用于判断指定字符是否为空白字符,空白符包含:空格、tab 键、换行符。
*/
@Test
public void reNameTest() {
String name = "小兔子";
boolean blank = StringUtils.isBlank(name);
System.out.println("blank = " + blank);//blank = false
String secondName = "";
boolean empty = StringUtils.isEmpty(name);
System.out.println("empty = " + empty);//empty = false
boolean blank1 = StringUtils.isBlank(secondName);
System.out.println("blank1 = " + blank1);//blank1 = true
String thirdName = " "; //是一个空格
boolean empty1 = StringUtils.isEmpty(thirdName);
System.out.println("空格empty1 = " + empty1);//空格empty1 = false
boolean blank2 = StringUtils.isBlank(thirdName);
System.out.println("空格blank2 = " + blank2);//空格blank2 = true
}
小结
都是经常用的基础知识