我有一个字符串:
你好,你怎么样?
我喜欢饼干饼干,苹果和煎饼煎饼。
我希望输出:
你好,你好吗?
我喜欢饼干,苹果和煎饼。
直到现在我已编码:
String[] s = input.split(" ");
String prev = s[0];
String ans = prev + " ";
for (int i = 1; i < s.length; i++) {
if (!prev.equals(s[i])) {
prev = s[i];
ans += prev + " ";
}
}
System.out.println(ans);
我得到的输出为:
你好,你好吗?
我喜欢饼干饼干,苹果和煎饼煎饼。
我需要一些帮助, . ! ? .
的逻辑..
你可以使用regex
为你做这件事。示例代码:
String regex = "\\b(\\w+)\\b\\s*(?=.*\\b\\1\\b)";
input = input.replaceAll(regex,"");
\b
匹配单词字符和非单词字符或位置(字符串的开头/结尾)之间的单词边界位置。\w
匹配单词字符和非单词字符或位置(字符串的开头/结尾)之间的单词边界位置。\b
匹配任何空格字符(空格,制表符,换行符)。\s
匹配*
或更多前面的标记。0
在主表达式之后匹配一个组,而不在结果中包含它。(?=
匹配除换行符之外的任何字符。.
匹配步骤2中捕获组#1的结果。注意:在此处使用单词边界以避免匹配部分单词非常重要。
这里是正则表达式演示和解释的链接:\1
您可以使用RegexDemo来标记单词。确保设置分隔符以分割单词。在你的情况下,他们是空格,逗号和句号。这可以帮助您分割没有标点符号的单词。然后,您可以将先前的标记与当前标记进行比较,如果它们相等,则可以忽略它。
您可以尝试以下代码段:
java.util.StringTokenizer
您应该使用辅助变量来存储您的单词而不使用标点符号。
String s = "I love cookies cookies, apples and pancakes pancakes.";
StringTokenizer tokenizer = new StringTokenizer(s, " ,.", true);
List<String> duplicateRemovedTokenList = new LinkedList<>();
String prevToken = null;
while (tokenizer.hasMoreTokens()) {
String currentToken = tokenizer.nextToken();
if (currentToken.equals(" ")) {
duplicateRemovedTokenList.add(currentToken);
continue;
}
if (!currentToken.equals(prevToken)) {
duplicateRemovedTokenList.add(currentToken);
prevToken = currentToken;
}
}
String duplicateRemovedString = StringUtils.join(duplicateRemovedTokenList, "");