我知道当我使用.replace时,我可以用另一个字符串替换指定的String。例如:
String string = “hi fjrkfinnek”;
string.replace(“fjrkfinnek”, “”);
我知道使用它会在此示例中用空格替换字符串的指定部分。但是,是否可以删除不“hi”的所有内容,而不是引用我想要替换的内容?
我想要的输出是删除除Hi之外的所有内容,如果可以的话,删除所有不是Hi的内容!
答案 0 :(得分:0)
现在你问:如何删除所有的"而不是X"从
Xxyz
简单的答案是:当你已经知道X应该是剩下的时候,那么" X"应该这样做。
更严肃一点:人们可以考虑在这里使用正则表达式 - 但它们只允许你匹配。不匹配"不是"。
你可以从[^hi]
开始 - 但这并不是你所希望的:它只是说:任何不包含h / i的东西都会匹配。
答案 1 :(得分:0)
当然有一些方法可以使这个工作。例如replace
通过否定前瞻(How to negate specific word in regex?)接受能够否定的正则表达式。或者您可以手动遍历输入等。
然而,有一个更简单的解决方案。如果您要删除输入中不是foo
的所有内容
test foo bar 123 test
然后结果可以完全为空(如果未包含foo
)或仅foo
(如果已包含)。因此,只需检查您的针是否存在:
public String deleteAllExceptFirst(String input, String needle) {
if (input.contains(needle)) {
return needle;
} else {
return "";
}
}
请注意,如果您想保留多个foo
次出现,则需要额外的工作。只计算foo
被包含的次数,然后将其打印出来连接:
public String deleteAllExcept(String input, String needle) {
StringBuilder sb = new StringBuilder();
// Find all occurrences
Pattern needlePatt = Pattern.compile(needle);
Matcher matcher = needlePatt.matcher(input);
while (m.find()) {
// Build the result
sb.append(needle);
}
return sb.toString();
}
对于测试输入
test foo bar 123 test foo foo bar foo
这会产生
foofoofoofoo
答案 2 :(得分:0)
给定您提供的字符串,您可以使用split()函数将其拆分为单词,然后仅附加那些不包含“hi”的部分。
如果您使用java 8,则可以使用过滤器执行此操作:
String string = “hi fjrkfinnek”;
Arrays.asList(string.split(" ")).stream()
.filter(s -> !s.equals("hi")).collect(Collectors.joining());
在上面的代码中,我将每个单词作为字符串,然后我将其流式传输并应用过滤器,以便只允许那些不同于“hi”的过滤器。最后我加入一个String。
答案 3 :(得分:0)
没有这样的图书馆。你可以这样做:
String replaceOthers(String required, String fullString) {
String result = fullString;
try (Scanner scanner = new Scanner(fullString)) {
while (scanner.hasNext()) {
String current = scanner.next();
if (!current.equals(required)) {
result = result.replace(current, "");
}
}
return result;
}
}
答案 4 :(得分:0)
我认为使用正则表达式我们可以做到这一点..
string.replaceAll("[^hi]", "?")