我必须在字符串中替换匹配单词出现前后的字符。
我想知道:
1。。如果我使用正则表达式或使用indexOf,循环等时, 功能 是否更好?
2。。什么被认为更 可读代码 :正则表达式或使用indexOf,遍历字符串等?
3。(时间复杂度 ),从而降低了复杂度。
澄清一下,我要问的是使用正则表达式或仅进行字符串操作会更好。在上方查看我的问题
我必须在字符串中替换匹配单词出现前后的字符。
我想知道:
1。。如果我使用正则表达式或使用indexOf,循环等时, 功能 是否更好?
2。。什么被认为更 可读代码 :正则表达式或使用indexOf,遍历字符串等?
3。(时间复杂度 ),从而降低了复杂度。
澄清一下,我要问的是使用正则表达式或仅进行字符串操作会更好。在上方查看我的问题
这是一个使用正式的Java regex模式匹配器的迭代解决方案:
for column in df.columns[1:]: # All but comment column.
df[column] = df[column].str.contains(df['Comment'])
此打印:
String input = "abc1111abc3434";
StringBuffer buffer = new StringBuffer();
String pattern = "((?!abc).)*abc";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
String replace = m.group(0).replaceAll(".","*");
replace = replace.substring(0,replace.length()-3) + "abc";
m.appendReplacement(buffer,replace);
}
int length = buffer.length();
m.appendTail(buffer);
String result = buffer.substring(0,length) + buffer.substring(length).replaceAll(".","*");
System.out.println(result);
这里使用的技巧是以下正则表达式模式:
abc****abc****
这将匹配不是序列((?!abc).)*abc
但以abc
结尾的任何内容。也就是说,此模式的第一部分是您要用abc
屏蔽的实际内容。在每次匹配时,我们都将屏蔽内容附加到StringBuffer后面,并加上***
标记。请注意,这会导致边缘情况。完成所有替换后,可能会出现不包含abc
内容的尾巴。在这种情况下,我们只需屏蔽整个子字符串并追加到StringBuffer。
在资源使用完成后,调用close()
方法。
这确保资源被关闭,并清除分配的内存。
根据您的情况,
input1.close();
和
input2.close();
两个结果都打印完之后。
扫描仪(JDK8)的详细API:https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
,String str ="abc1111abc3434";
System.out.println( str.replaceAll("[^\"abc\"]","*"));