如何在Java中移除字符串倒数第六个单词,求优雅或单行实现方案
Java字符串移除指定字段方案
需求说明
我有如下几个字符串:
String str1 = "Car honda3454 is unknown in the system"; String str2 = "Car BMW4545 is unknown in the system"; String str3 = "New Car Audi9898 is unknown in the system"; String str4 = "Very old car mitsubishi4099 is unknown in the system";
需要移除所有字符串的倒数第六个单词,最终得到结果:
Car is unknown in the system Car is unknown in the system New Car is unknown in the system Very old car is unknown in the system
本质是删除字符串中的carXXXX格式字段,求单行或优雅实现方案。
解决方案
方案1:按「删除倒数第6个单词」逻辑实现(通用场景,不依赖car字段)
直接用正则匹配倒数第6个单词替换为空,单行代码即可:
str = str.replaceAll("\\s+\\S+(?=(\\s+\\S+){5}$)", "");
正则逻辑:匹配后面恰好跟随5个单词的非空字符段(即倒数第6个单词)以及其前导空格,直接替换为空,完全匹配要求的删除逻辑。
方案2:按「删除car后带数字的型号字段」逻辑实现(更精准,不受句子结构变化影响)
如果核心需求是删除car(大小写不敏感)后面紧跟的字母+数字组合的型号字段,用这个方案更稳妥,不会因为后续句子单词数变化删错内容:
str = str.replaceAll("(?i)(?<=\\bcar\\s)\\b[a-zA-Z]+\\d+\\b\\s?", "");
正则逻辑:(?i)开启大小写匹配,匹配car单词后面紧跟的由字母+数字组成的独立单词,以及其后面的可选空格,替换为空即可。
两种方案都可以直接调用,一行代码就能完成所有字符串的处理,不需要额外拆分字符串、操作数组的冗余逻辑。
内容的提问来源于stack exchange,提问作者Sandra
相关产品推荐
相关产品推荐

