3 回答
TA贡献1884条经验 获得超4个赞
一种方法是使用 java 流
String str = "Expected_Start_DateTime,Metrics_Count,Device_UID,Command_Name,Command_Interval,Start_DateTime,Instance_UID,Execution_Date,Metrics_Size_KB,End_DateTime,Tags_Countfrom command_execution";
String result = Stream.of(str.split(","))
.filter(word -> !word.contains("Date"))
.collect(Collectors.joining(","));
TA贡献1812条经验 获得超5个赞
如上所述,使用数组的方法.split()
可能是更好的方法,但如果您对正则表达式感到好奇,可以使用以下几种方法来实现您的目标。
\b\w*?[dD]ate\w*?\b
- 这会选择其中包含“日期”的任何单词。
该
\b
标签指定一个单词边界 - 如果字符不是单词字符(不是 ),\w
它会中断,并且还会在字符串的开头和结尾处中断,因此它也会捕获字符串中的第一个和最后一个单词.该
\w
标记指定一个“单词”字符:a-z
、A-Z
、0-9
和_
。由于您的话中没有任何奇怪的字符,因此效果很好!*?
根据需要匹配尽可能多的单词字符,但尽可能少。 这确保它捕获“日期”之前的所有字符,但只捕获该词所需的字符。[dD]ate
从字面上查找单词date
orDate
。
^,*|,*$
- 这会选择要处理的前导和尾随逗号。
^,*
- 将逗号锚定在字符串的前面,并尽可能多地获取。|
或者...,*$
- 获得尽可能多的逗号,固定在字符串的后面。
,{2,}
- 这会选择 2 个或更多逗号的所有实例,供您替换为单个逗号。
,
选择一个逗号,只要...{2,}
它们之间有 2 到无限数量,彼此相邻。
祝你好运!
TA贡献1804条经验 获得超2个赞
似乎您真正想做的是使用数组。(因为你似乎正在处理一个实际上是一堆字符串和逗号的字符串)。完成所需操作的一种方法是执行 str.split(","),然后循环检查 strArray[i].contains("date")。让我知道我是否应该更清楚
添加回答
举报