java中对字符串进行解析_java中字符串相关操作解析

b9ec01425a42cc6f3b0a1b3244211bb5.png

一、多行字符串

每个操作系统对换行符的定义都不尽相同,所以在拼接多行字符串之前,需要先获取到操作系统的换行符,Java 可以通过下面的方式获取:

String newLine = System.getProperty("line.separator");

有了换行符,就可以使用 String 类的 concat() 方法或者直接使用“+”号操作符拼接多行字符串了。也可以使用StringBuilder 和StringBuffer也是可以的。

Java 8 的 String 类加入了一个新的方法 join(),可以将换行符与字符串拼接起来。

另外,Java 还可以通过 Files.readAllBytes() 方法从源文件中直接读取多行文本,格式和源文件保持一致:

String mutiLine = new String(Files.readAllBytes(Paths.get("src/main/resource/cmower.txt")));

使用String拼接多行字符串示例如下:

String newLine = System.getProperty("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位数

// '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) (random.nextFloat() * (rightLimit - leftLimit + 1));

buffer.append((char) randomLimitedInt);

}

String generatedString = buffer.toString();

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("使用正则表达式:" + removeLastWords.replaceAll(".$", ""));

当然了,replaceAll() 方法也不是 null 安全的,所以要提前判空:

String result= (removeLastWords == null) ? null : removeLastWords.replaceAll(".$", "");

(5)如果对 Java 8 的 Lambda 表达式和 Optional 比较熟的话,还可以这样写

String removeLastWords = "jason";

String result1 = Optional.of(removeLastWords).map(str -> str.replaceAll(".$", "")).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 = StringUtils.countMatches(someString, "n");

System.out.println("使用第三方类库:" + result);

六、拆分字符串

大多数情况下,String 类的 split() 方法就能够满足拆分字符串的需求,除了这个还有其他的方法,如下:

(1)使用String的split()方法

// 拆分字符串

String str = "a,b,c,d";

String[] arryStr = str.split(",");

System.out.println("拆分的字符串:" + ArrayUtils.toString(arryStr));

// 结果如下

拆分的字符串:{a,b,c,d}

(2)使用Apache 的 Commons Lang 包中的StringUtils 类

String str = "a,b,c,d";

System.out.println("使用工具类:" + ArrayUtils.toString(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 = firstStr.concat(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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值