我有一个像这样的字符串:
你好,你好吗?
我喜欢饼干,饼干,苹果和煎饼煎饼。
我希望输出:
你好,你好吗?
我喜欢饼干,苹果和煎饼。
到目前为止,我已经编码:
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);
我得到的输出为:
你好,你好吗?
我喜欢饼干,饼干,苹果和煎饼煎饼。
我需要, . ! ? .
的逻辑方面的帮助。.
答案 0 :(得分:3)
您可以使用regex
为您完成此操作。示例代码:
String regex = "\\b(\\w+)\\b\\s*(?=.*\\b\\1\\b)";
input = input.replaceAll(regex,"");
\b
匹配单词字符和非单词字符之间的单词边界位置或位置(字符串的开始/结束)。\w
匹配任何单词字符(字母数字和下划线)。\b
匹配单词字符和非单词字符之间的单词边界位置或位置(字符串的开始/结束)。\s
匹配任何空白字符(空格,制表符,换行符)。*
匹配0
或更多个前面的令牌。(?=
匹配主表达式后的组,但不将其包括在结果中。.
匹配除换行符以外的任何字符。\1
与步骤2中捕获组#1的结果匹配。注意:在此处使用单词边界以避免与部分单词匹配非常重要。
以下是正则表达式演示和说明的链接:RegexDemo
答案 1 :(得分:2)
您应该使用辅助变量来存储您的单词,而不要使用标点符号。
String[] s = input.split(" ");
String ans = "";
for (int i = 0; i < s.length - 1; i++) {
String currentAux = s[i].replaceAll("[,.!?]", "");
String nextAux = s[i + 1].replaceAll("[,.!?]", "");
if (nextAux.equals(currentAux)) {
continue;
}
ans += " " + s[i];
}
ans += " " + s[s.length - 1];
System.out.println(ans);
答案 2 :(得分:2)
您可以使用var numbers = Array(255).map(function(v, i) {
return i + 1;
});
var opposite_brightness = numbers.reverse()[numbers.indexOf(brightness)];
来标记单词。确保设置分隔符以分割单词。在您的情况下,它们是空格,逗号和句号。这可以帮助您拆分不带标点符号的单词。然后,您可以将前一个令牌与当前令牌进行比较,如果它们相等,则可以忽略它。
您可以尝试以下代码段:
java.util.StringTokenizer