Java String 常用操作整理
2020-07-19 本文已影响0人
xiaogp
记录常用的String操作, 包括String和StringUtils下的方法
(1) stratEndWith
(2) 字符串转List, List转字符串
(3) 字符串反转
(4) 字符串和字节数组互转
(5) 判断是否为空
(6) 两边截取 trim和strip
(7) 是否包含判断
(8) replace replaceAll替换字符和字符串
(9) 对象,数值类型转字符串
(10) split 字符串分割
(11) equals 判断字符串相等
(12) 查找元素索引indexOf
(13) String和int,double,long,boolean互转
引入依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
stratEndWith
public static void stratEndWithTest() {
String a = "sjdir";
System.out.println(a.startsWith("s"));
System.out.println(a.startsWith("sj"));
// 指定索引
System.out.println(a.startsWith("d", 2));
// StringUtils
System.out.println(StringUtils.startsWith(a, "s"));
// 忽略大小写
System.out.println(StringUtils.startsWithIgnoreCase(a, "S"));
// startsWithAny, 判断开头是否在一个数组中
System.out.println(StringUtils.startsWithAny(a, new String[] {"a", "s", "k"}));
// endWith
System.out.println(a.endsWith("r"));
System.out.println(a.endsWith("ir"));
System.out.println(StringUtils.endsWith(a, "ir"));
System.out.println(StringUtils.endsWithAny(a, new String[] {"ct", "dir"}));
System.out.println(StringUtils.endsWithIgnoreCase(a, "DIR"));
}
字符串转List, List转字符串
public static void listTest() {
// 字符串转List, List转字符串
String[] a = new String[] {"a", "b", "e", "d"};
String aa = StringUtils.join(a, ",");
System.out.println(aa);
List<String> b = Arrays.asList(aa.split(","));
System.out.println(b);
}
字符串反转
// 字符串反转
public static void reverseTest() {
String a = "中华人名共和国";
String aa = StringUtils.reverse(a);
System.out.println(aa); // 国和共名人华中
// 使用StringBuilder
System.out.println(new StringBuilder(a).reverse().toString());
}
字符串和字节数组互转
// 字符串转字节数组
public static void byteTest() {
String a = "中华人民共和国";
byte[] aa = a.getBytes();
System.out.println(aa);
String b = new String(aa);
System.out.println(b);
}
判断字符串是否为空
// 判断为空字符串
public static void emptyTest() {
// isEmpty, 等同于length==0
String a = "中华人民共和国";
if (a.isEmpty()) {
System.out.println("为空");
}
// 为空或者为null
if (a == null || a.length() == 0){
System.out.println("为空");
}
// 多个空字符串的情况
if (a == null || a.trim().length() == 0) {
System.out.println("为空");
}
}
}
去掉两端控制符
// 去掉两端的控制符
public static void trimTest() {
// 都可以
String a = " 中华人民共和国";
System.out.println(a.length());
System.out.println(a.trim());
System.out.println(a.trim().length());
String b = " 中华人民共和国\n";
System.out.println(b.length());
System.out.println(b.trim());
System.out.println(b.trim().length());
String c = " 中华人民共和国\r\n";
System.out.println(c.length());
System.out.println(c.trim());
System.out.println(c.trim().length());
String d = ",中国人民共和国,";
System.out.println(d.length());
System.out.println(StringUtils.strip(d, ",")); // 中国人民共和国
}
判断是否包含
// 判断是否包含
public static void containTest() {
String a = " 中华人民共和国";
System.out.println(a.contains("中")); // true
System.out.println(a.contains("中华")); // true
System.out.println(a.contains("中人")); // false
// 忽略大小写
String b = "abcDe";
System.out.println(StringUtils.containsIgnoreCase(b, "A")); // true
// 是否包含任意一个
System.out.println(StringUtils.containsAny(b, new char[] {'a', 'g', 'l'})); // false
System.out.println(StringUtils.containsAny(b, "agl")); // true
}
replace替换
// replace替换
public static void replaceTest() {
String a = "abcdaaac";
// 单个字符全部替换
System.out.println(a.replace('c', 'l')); // abldaaal
// 替换字符串
System.out.println(a.replace("abc", "lll")); // llldaaac
// 基于正则表达式
String b = "1acd43";
System.out.println(a.replaceAll("\\d", "aaa")); // abcdaaac
// 同事替换多个字符
System.out.println(a.replaceAll("a|d", "k")); // kbckkkkc
// \\转义
String c = "acd%$kk*";
System.out.println(c.replaceAll("\\%|\\$|\\*", "1"));
String d = "{[(123)]}\n";
// 去除各种括号和换行 制表符
String e = d.replaceAll("\\[|\\]|\\(|\\)|\\ |\\{|\\}|\\【|\\】|\\(|\\)|\\ |\\t|\\n|\\r|\\n|\\n\\r|\\s", "");
System.out.println(e);
}
对象,数值类型转字符串
public static void toStringTest() {
int a = 123;
double b = 123.1;
// String aa = (String) a; // 不能把int转化为String
// String bb = (String) b;
String aaa = String.valueOf(a);
System.out.println(aaa);
// String.valueOf 就是调用的 Integer.toString
String aaaa = Integer.toString(a);
System.out.println(aaaa);
// 调用的StringBuilder append toString
String aaaaa = "" + a;
System.out.println(aaaaa);
// String.valueof 和 toString的区别
String c = null;
// null.toString爆空指针异常
// System.out.println(c.toString());
// String.valueOf 返回字符串null
System.out.println(String.valueOf(c)); // "null"
}
split
public static void splitTest() {
String a = ",,1, 2, 3, aa, dd,,";
// 默认,limit=0, 结尾是空字符串去掉
String[] b = a.split(",");
// -1, 结尾部分如果分割是空字符串,保留
String[] c = a.split(",", -1);
// 默认模式,结尾是空字符串去掉,开头不影响
String[] d = a.split(",", 0);
System.out.println("limit=0:" + Arrays.toString(d));
String[] f = a.split(",", 2); // 2 分割limit-1次,分为两段
// 去除开头结尾指定字符
System.out.println(StringUtils.strip(a, ",")); // 1, 2, 3, aa, dd
// 指定多个分隔符,使用表达式[ ]
String a = "1,2,3,4.5?6";
String[] b = a.split("[,.?]");
System.out.println(Arrays.asList(b)); // [1, 2, 3, 4, 5, 6]
}
equals
public static void equalTest() {
String a = "123";
String b = "123";
// = 判断是否是相同内存地址,java中字符串的值是不可改变的,相同的字符串在内存中只会存
System.out.println(a == b); // true
System.out.println(a.equals(b));
String c = new String("123");
System.out.println(a == c); // false,指向不同的对象
// 用equals方法比较的是字符串的内容是否相同
System.out.println(a.equals(c)); // true
System.out.println(a == ("1234".substring(0,3))); // false
System.out.println(a.equals("1234".substring(0,3)));
}
indexOf,lastIndexOf
indexOf
可以指定查找的起始位置
后的第一个元素的,从起始索引位置开始(包含
),如果找不到返回-1
,lastIndexOf
返回从后开始的第一个找到的元素索引
String tmp = "123411";
System.out.println(tmp.indexOf("1")); // 0
System.out.println(tmp.indexOf("1", 1)); // 4
System.out.println(tmp.indexOf("1", 6)); // -1
System.out.println(tmp.lastIndexOf("1")); // 5;
类型互转
使用其他类型对象的parse
转化字符串为对应类型,使用String.valueOf
将其他类型转化为字符串
// 字符串和int,double,boolean的互转
boolean v1 = Boolean.parseBoolean("true");
boolean v2 = Boolean.parseBoolean("True");
int v3 = Integer.parseInt("123");
double v4 = Double.parseDouble("1.1");
long v5 = Long.parseLong("123456");
String v11 = String.valueOf(v1);
String v22 = String.valueOf(v2);
String v33 = String.valueOf(v3);
String v44 = String.valueOf(v4);
String v55 = String.valueOf(v5);