java中字符串相关操作解析
⼀、多⾏字符串
每个操作系统对换⾏符的定义都不尽相同,所以在拼接多⾏字符串之前,需要先获取到操作系统的换⾏符,Java 可以通过下⾯的⽅式获取:
String newLine = Property("line.separator");
有了换⾏符,就可以使⽤ String 类的concat()⽅法或者直接使⽤“+”号操作符拼接多⾏字符串了。也可以使⽤StringBuilder 和StringBuffer也是可以的。
Java 8 的 String 类加⼊了⼀个新的⽅法join(),可以将换⾏符与字符串拼接起来。
另外,Java 还可以通过adAllBytes()⽅法从源⽂件中直接读取多⾏⽂本,格式和源⽂件保持⼀致:
String mutiLine = new ("src/main/")));
使⽤String拼接多⾏字符串⽰例如下:
String newLine = Property("line.separator");
String useJoin = String.join(newLine, "hello", "world", "!");
System.out.println("使⽤java 8 String Join⽅法:" + newLine + useJoin);
// 输出结果如下
使⽤java 8 String Join⽅法:
hello
world
!
⼆、检查字符串是否为空
说到“空”这个概念,它在编程中有两种定义,英⽂单词分别是 empty 和 blank,来做⼀下区分。
如果字符串为 null,或者长度为 0,则为 empty;如果字符串仅包含空格,则为 blank。
⽰例如下:
// 区分空字符串:1、只有空格的字符串;2、为空的字符串
String blank = " ";
String containNull = "";
System.out.println("只有空格的字符串" + StringUtils.isBlank(blank));
System.out.println("为null的字符串" + StringUtils.isEmpty(containNull));
三、⽣成随机字符串
有时候,我们需要⽣成⼀些随机的字符串,⽐如说密码,校验码等。
(1)使⽤原⽣jdk的⽅式⽣成随机数
// ⽣成a-z之间的随机6位数java中split的用法
// 'a'
int leftLimit = 97;
// 'z'
int rightLimit = 122;
int targetStringLength = 6;
Random random = new Random();
StringBuilder buffer = new StringBuilder(targetStringLength);
for (int i = 0; i < targetStringLength; i++) {
int randomLimitedInt = leftLimit + (int) (Float() * (rightLimit - leftLimit + 1));
buffer.append((char) randomLimitedInt);
}
String generatedString = String();
System.out.println("使⽤原⽣类库随机⽣成6位密码" + generatedString);
(2)使⽤ Apache 的 Commons Lang 包,RandomStringUtils.random() ⽣成随机数
// 使⽤⼯具类随机⽣成字符,第⼀个参数:位数,第⼆个参数:是否⽣成包含字符的随机字符,第三个参数:是否⽣成包含数字的随机数
String password = RandomStringUtils.random(6, true, true);
System.out.println("使⽤⼯具类随机⽣成6位密码:" + password);
四、删除字符串最后⼀个字符
删除字符串最后⼀个字符,最简单的⽅法就是使⽤substring()⽅法进⾏截取,0 作为起始下标,length() - 1作为结束下标。
(1)不管怎么样,substring()⽅法不是 null 安全的,需要先判空
⽰例如下:
String removeLastWords = "jason";
System.out.println("去掉最后⼀个字符串:" + removeLastChar(removeLastWords));
public static String removeLastChar(String s) {
return (s == null || s.length() == 0) ? null : (s.substring(0, s.length() - 1));
}
(2)如果不想在操作之前判空,那么就直接⽤Apache 的 Commons Lang 包中的⼯具类
String removeLastWords = "jason";
System.out.println("使⽤⼯具类:" + StringUtils.substring(removeLastWords, 0, removeLastWords.length() - 1));
(3)如果⽬的⾮常明确——就是只删除字符串的最后⼀个字符,还可以使⽤ StringUtils 类的chop()⽅法
String removeLastWords = "jason";
System.out.println("⽬的⾮常明确:" + StringUtils.chop(removeLastWords));
// chop⽅法源码,内部也是使⽤的subString⽅法
public static String chop(String str) {
if (str == null) {
return null;
} else {
int strLen = str.length();
if (strLen < 2) {
return "";
} else {
int lastIdx = strLen - 1;
String ret = str.substring(0, lastIdx);
char last = str.charAt(lastIdx);
return last == '\n' && ret.charAt(lastIdx - 1) == '\r' ? ret.substring(0, lastIdx - 1) : ret;
}
}
}
(4)如果你对正则表达式了解的话,也可以使⽤replaceAll()⽅法进⾏替换,把最后⼀个字符.$替换成空字符串就可以了。String removeLastWords = "jason";
System.out.println("使⽤正则表达式:" + placeAll(".$", ""));
当然了,replaceAll()⽅法也不是 null 安全的,所以要提前判空:
String result= (removeLastWords == null) ? null : placeAll(".$", "");
(5)如果对 Java 8 的 Lambda 表达式和 Optional ⽐较熟的话,还可以这样写
String removeLastWords = "jason";
String result1 = Optional.of(removeLastWords).map(str -> placeAll(".$", "")).orElse(removeLastWords);
System.out.println("使⽤lambda:" + result1);
五、统计字符在字符串中出现的次数
要统计字符在字符串中出现的次数,有很多⽅法,如下:
(1)直接使⽤ JDK 的 API 就是最直接的⼀种
// 统计字符在字符串中出现的次数
String someString = "jasonn";
char someChar = 'n';
int count = 0;
for (int i = 0; i < someString.length(); i++) {
if (someString.charAt(i) == someChar) {
count++;
}
}
System.out.println("n出现的次数:" + count);
(2)使⽤Java 8 的特性
String someString = "jasonn";
long count = someString.chars().filter(ch -> ch == 'n').count();
System.out.println("使⽤java 8特性:" + count1);
(3)使⽤第三⽅类库,可以选择 Apache 的 Commons Lang 包
String someString = "jasonn";
int result = untMatches(someString, "n");
System.out.println("使⽤第三⽅类库:" + result);
六、拆分字符串
⼤多数情况下,String 类的split()⽅法就能够满⾜拆分字符串的需求,除了这个还有其他的⽅法,如下:(1)使⽤String的split()⽅法
// 拆分字符串
String str = "a,b,c,d";
String[] arryStr = str.split(",");
System.out.println("拆分的字符串:" + String(arryStr));
// 结果如下
拆分的字符串:{a,b,c,d}
(2)使⽤Apache 的 Commons Lang 包中的StringUtils 类
String str = "a,b,c,d";
System.out.println("使⽤⼯具类:" + String(StringUtils.split(str, ",")));
七、字符串⽐较
字符串的⽐较有两种⽅法:使⽤==和equals()来进⾏⽐较。
String a = "jason";
String b = "jason";
String c = new String("jason");
// true
System.out.println(a == b);
// false
System.out.println(a == c);
// true
System.out.println(a.equals(c));
需要注意:
== :当⽤于值⽐较时⽐较数值是否相等,⽤于⽐较引⽤时是⽐较两个对象的引⽤地址是否相同;equals:就是⽤来判断字符串的值是否相等。
⼋、字符串拼接
在操作字符串时经常会遇到字符串拼接的场景,拼接字符串的⽅法如下:
(1)+号操作符拼接字符串
String firstStr = "jason";
String secondStr = "⼩蜗⽜";
String result = firstStr + secondStr; // +号操作在底层其实是使⽤的StringBuilder的append⽅法
System.out.println(result);
// 结果
jason⼩蜗⽜
(2)使⽤StringBuilder(线程不安全) 和StringBuffer(线程安全)
StringBuilder stringBuilder = new StringBuilder();
System.out.println(stringBuilder.append(firstStr).append(secondStr));
StringBuffer stringBuffer = new StringBuffer();
System.out.println(stringBuffer.append(firstStr).append(secondStr));
// 结果
jason⼩蜗⽜
(3)String 类的 concat ⽅法
String firstStr = "jason";
String secondStr = "⼩蜗⽜";
String result = at(secondStr)
System.out.println(result);
(4)String 类的 join ⽅法
JDK 1.8 提供了⼀种新的字符串拼接⽅式:String 类增加了⼀个静态⽅法 join。
String firstStr = "jason";
String secondStr = "⼩蜗⽜";
String result = String.join("",firstStr, secondStr); // 第⼀个参数是分隔符
System.out.println(result);
(5)使⽤Apache 的 Commons Lang3 包中的⼯具类
String firstStr = "jason";
String secondStr = "⼩蜗⽜";
String result = StringUtils.join(firstStr, secondStr); System.out.println(result);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论