Java 从字符串中删除包含特定单词或部分单词的单词
我有一个字符串,我想删除其中包含特定单词的特定单词 例如:Java 从字符串中删除包含特定单词或部分单词的单词,java,regex,string,Java,Regex,String,我有一个字符串,我想删除其中包含特定单词的特定单词 例如: String str=“Create_DateTime,Hello,DateTime,Before” 每个包含单词“Date”的单词都应该被删除,因此删除后我们将得到以下字符串: 你好,在 我有这个字符串: Expected\u Start\u DateTime,Metrics\u Count,Device\u UID,Command\u Name,Command\u Interval,Start\u DateTime,Instance
String str=“Create_DateTime,Hello,DateTime,Before”
每个包含单词“Date”的单词都应该被删除,因此删除后我们将得到以下字符串:
你好,在
我有这个字符串:
Expected\u Start\u DateTime,Metrics\u Count,Device\u UID,Command\u Name,Command\u Interval,Start\u DateTime,Instance\u UID,Execution\u Date,Metrics\u Size\u KB,End\u DateTime,Tags\u Countfrom Command\u Execution
我成功地删除了所有不需要的单词,因此现在我的字符串如下所示:
、度量值计数、设备UID、命令名、命令间隔、实例UID、度量值大小KB、标记值从命令执行开始计数
我想删除单词前后的“,”
这是我用于执行上述操作的代码:
String str1=str.replaceAll(“\\w*日期\\w*”,”)代码>
原始字符串:
Expected\u Start\u DateTime,Metrics\u Count,Device\u UID,Command\u Name,Command\u Interval,Start\u DateTime,Instance\u UID,Execution\u Date,Metrics\u Size\u KB,End\u DateTime,Tags\u Countfrom Command\u Execution
预期:
Metrics\u Count、Device\u UID、Command\u Name、Command\u Interval、Instance\u UID、Metrics\u Size\u KB、Tags\u Countfrom Command\u execution
实际:
、度量值计数、设备UID、命令名、命令间隔、实例UID、度量值大小KB、从命令执行开始的标记计数似乎您真正想做的是使用数组。(因为您处理的字符串实际上是一组字符串和逗号)。完成所需操作的一种方法是执行str.split(“,”),然后循环检查strArray[i].是否包含(“日期”)。让我知道我是否应该更清楚似乎您真正想做的是使用阵列。(因为您处理的字符串实际上是一组字符串和逗号)。完成所需操作的一种方法是执行str.split(“,”),然后循环检查strArray[i].是否包含(“日期”)。让我知道我是否应该更清楚一种方法是使用java流
String str=“预期的开始日期时间、度量值计数、设备UID、命令名称、命令间隔、开始日期时间、实例UID、执行日期、度量值大小KB、结束日期时间、从命令执行开始的标记计数”;
字符串结果=Stream.of(str.split(“,”))
.filter(word->!word.contains(“日期”))
.collect(收集器。连接(“,”);
一种方法是使用java流
String str=“预期的开始日期时间、度量值计数、设备UID、命令名称、命令间隔、开始日期时间、实例UID、执行日期、度量值大小KB、结束日期时间、从命令执行开始的标记计数”;
字符串结果=Stream.of(str.split(“,”))
.filter(word->!word.contains(“日期”))
.collect(收集器。连接(“,”);
如上所述,使用数组和.split()
的方法可能是一种更好的方法,但是如果您对regex感到好奇,这里有一些方法可以用来实现您的目标
\b\w*?[dD]ate\w*?\b
-选择任何包含“日期”的单词
\b
标记指定单词边界-如果字符不是单词字符(不是\w
),它将中断,并且还会在字符串的开头和结尾中断,因此它也将捕获字符串中的第一个和最后一个单词
\w
标记指定一个“字”字符:a-z
、a-z
、0-9
和
。因为你的文字中没有任何奇怪的字符,所以这非常有效李>
*?
根据需要匹配尽可能多的单词字符,但尽可能少。这确保它捕获“日期”之前的所有字符,但只捕获该单词所需的字符数李>
[dD]ate
逐字查找单词date
或date
李>
^,*|,*$
-这将选择要处理的前导和尾随逗号
^,*
-将逗号锚定到字符串的前面,并获取尽可能多的逗号
|
或
,*$
-获取尽可能多的逗号,定位到字符串的后面
,{2,}
-选择2个或多个逗号的所有实例,供您用单个逗号替换
,
选择一个逗号,只要
{2,}
它们的数量介于2到无限之间,彼此相邻
祝你好运 如上所述,使用数组和.split()
的方法可能是一种更好的方法,但是如果您对regex感兴趣,这里有一些方法可以用来实现您的目标
\b\w*?[dD]ate\w*?\b
-选择任何包含“日期”的单词
\b
标记指定单词边界-如果字符不是单词字符(不是\w
),它将中断,并且还会在字符串的开头和结尾中断,因此它也将捕获字符串中的第一个和最后一个单词
\w
标记指定一个“字”字符:a-z
、a-z
、0-9
和
。因为你的文字中没有任何奇怪的字符,所以这非常有效李>
*?
根据需要匹配尽可能多的单词字符,但尽可能少。这确保它捕获“日期”之前的所有字符,但只捕获该单词所需的字符数李>
[dD]ate
逐字查找单词date
或date
李>
^,*|,*$
-这将选择要处理的前导和尾随逗号
<