我能想象的最简单的方法是使用 ([^\s]+)(?=(\s[^\s]+){5}$) 正则表达式替换。试试:
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";
System.out.println(str1.replaceFirst("([^\\s]+)(?=(\\s[^\\s]+){5}$)", ""));
System.out.println(str2.replaceFirst("([^\\s]+)(?=(\\s[^\\s]+){5}$)", ""));
System.out.println(str3.replaceFirst("([^\\s]+)(?=(\\s[^\\s]+){5}$)", ""));
System.out.println(str4.replaceFirst("([^\\s]+)(?=(\\s[^\\s]+){5}$)", ""));
(编辑)
如果您还想删除空格字符,以免出现多余的空白字符,请使用\S+\s+(?=(\S+\s+){4}\S+\s*$)。
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";
String strAdditional = "mitsubishi4099 is unknown in the system";
String regex = "\\S+\\s+(?=(\\S+\\s+){4}\\S+\\s*$)";
System.out.println(str1.replaceFirst(regex, ""));
System.out.println(str2.replaceFirst(regex, ""));
System.out.println(str3.replaceFirst(regex, ""));
System.out.println(str4.replaceFirst(regex, ""));
System.out.println(strAdditional.replaceFirst(regex, ""));
解释:
我将以\S+\s+(?=(\S+\s+){4}\S+\s*$) 正则表达式为例。分为两部分:
-
Match
\S+\s+,代表您尝试捕获的内容。
-
Positive Lookahead
(?=(\S+\s+){4}\S+\s*$),表示需要满足的规则,但不会选择字符。
详细说明我们拥有的第一部分:\S+\s+
-
\S 选择任何不代表空格的字符(可以是数字、字母、符号等)。
-
+,链接到前一个选择器,定义它必须至少出现一次,并且可以无限次重复。这保证了字符串。
-
\s 选择任何表示空格的字符(可以是制表符、换行符、空格等)。
-
+ 与上面的功能相同,但这次允许多个空格。
因此,\S+ 选择表示字符序列的任何字符,直到它被一个(或一系列)空格 \s+ 打断。
详解第二部分:(?=(\S+\s+){4}\S+\s*$)
-
(?=) 包含所有这部分,称为正向前瞻。它表示需要满足此处包含的规则集,但不会选择此文本。
-
(\S+\s+){4} 再次表示一个字符串,它可以表示一个单词,直到它被空格打断。不同的是,这次它包含在由() 分隔的组内,并且该组必须重复4 次{4},即4 个单词。
-
\S+\s* 与第一部分几乎相同,不同之处在于这是最后一个单词,它后面可能包含也可能不包含任何空白字符。 \s 后面的* 表示规则可以满足任意数量的空白字符,即使没有。
-
$ 是代表文本结尾的锚点。它表明这条规则必须在某些方面从文本的结尾到开头进行分析。
因此,$ 表示应该从末尾开始计算; \S+\s* 计算最后一个单词,它后面可能包含也可能不包含空格; (\S+\s+){4} 在最后一个字之前计算四个字;并且所有内容都包含在(?=) 中,这会强制您遵守这些规则,但不会选择与它们匹配的文本。
这是一个解释正则表达式如何工作的在线示例:https://regex101.com/r/Lvzog2/1