从 java 中的句子中删除重复字符串
Remove repetitive string from sentence in java
我正在编写 java 代码,我想在其中删除重复的单词。例如,如果我在任何单词中得到 space,下面的代码可以很好地删除它们:
1298 Anthony 1298 Anthony
,它会变成这样:
1298 Anthony
但是对于任何其他特殊字符,例如:
1298 Anthony.ef 1298 Anthony.ef
,它将显示为:
ef. 1298 Anthony
.
下面给出了我的方法,我想让它适用于每个特殊字符,特别是:coma(,)、fullstop(.)、dash(-)、underscore(_)。请帮我解决这个问题。
public static void removeString(){
String name1 = "1298 Anthony.ef 1298 Anthony.ef";
String[] strArr = name1.split(" ");
Set<String> set = new HashSet<String>(Arrays.asList(strArr));
String[] result = new String[set.size()];
set.toArray(result);
StringBuilder res = new StringBuilder();
for (int i = 0; i < result.length; i++) {
String string = result[i];
if(i==result.length-1){
res.append(string);
}
else{
res.append(string).append(" ");
}
}
System.out.println(res.toString());
String abc = res.toString();
}
您在 space 左右拆分 name1
。您可以尝试将 name1
拆分为 any non-word character:
names.split("\W+");
方法String.split接受正则表达式作为参数。引用文档:
Splits this string around matches of the given regular expression.
name1.split(" ");
围绕单个 space 和 returns 数组拆分字符串:[1298, Anthony.ef, 1298, Anthony.ef]
names.split("\W+");
围绕任何非单词字符(逗号、点、破折号等)和 returns 数组拆分字符串:[1298, Anthony, ef, 1298, Anthony, ef]
正如您在本例中看到的那样,它能够将 Anthony.ef
拆分为单独的字符串。
更新: 如果您想保留原始字符串中的单词顺序,您可能需要使用 LinkedHashSet
而不是 HashSet
。例如:
public static void removeString(){
String name1 = "1298 Anthony.ef 1298 Anthony.ef";
String[] strArr = name1.split("\W+");
Set<String> set = new LinkedHashSet<String>(Arrays.asList(strArr));
String[] result = new String[set.size()];
set.toArray(result);
StringBuilder res = new StringBuilder();
for (int i = 0; i < result.length; i++) {
String string = result[i];
if(i==result.length-1){
res.append(string);
}
else{
res.append(string).append(" ");
}
}
System.out.println(res.toString());
String abc = res.toString();
}
看看这个问题:Is there an insertion order preserving Set that also implements List?
我正在编写 java 代码,我想在其中删除重复的单词。例如,如果我在任何单词中得到 space,下面的代码可以很好地删除它们:
1298 Anthony 1298 Anthony
,它会变成这样:
1298 Anthony
但是对于任何其他特殊字符,例如:
1298 Anthony.ef 1298 Anthony.ef
,它将显示为:
ef. 1298 Anthony
.
下面给出了我的方法,我想让它适用于每个特殊字符,特别是:coma(,)、fullstop(.)、dash(-)、underscore(_)。请帮我解决这个问题。
public static void removeString(){
String name1 = "1298 Anthony.ef 1298 Anthony.ef";
String[] strArr = name1.split(" ");
Set<String> set = new HashSet<String>(Arrays.asList(strArr));
String[] result = new String[set.size()];
set.toArray(result);
StringBuilder res = new StringBuilder();
for (int i = 0; i < result.length; i++) {
String string = result[i];
if(i==result.length-1){
res.append(string);
}
else{
res.append(string).append(" ");
}
}
System.out.println(res.toString());
String abc = res.toString();
}
您在 space 左右拆分 name1
。您可以尝试将 name1
拆分为 any non-word character:
names.split("\W+");
方法String.split接受正则表达式作为参数。引用文档:
Splits this string around matches of the given regular expression.
name1.split(" ");
围绕单个 space 和 returns 数组拆分字符串:[1298, Anthony.ef, 1298, Anthony.ef]
names.split("\W+");
围绕任何非单词字符(逗号、点、破折号等)和 returns 数组拆分字符串:[1298, Anthony, ef, 1298, Anthony, ef]
正如您在本例中看到的那样,它能够将 Anthony.ef
拆分为单独的字符串。
更新: 如果您想保留原始字符串中的单词顺序,您可能需要使用 LinkedHashSet
而不是 HashSet
。例如:
public static void removeString(){
String name1 = "1298 Anthony.ef 1298 Anthony.ef";
String[] strArr = name1.split("\W+");
Set<String> set = new LinkedHashSet<String>(Arrays.asList(strArr));
String[] result = new String[set.size()];
set.toArray(result);
StringBuilder res = new StringBuilder();
for (int i = 0; i < result.length; i++) {
String string = result[i];
if(i==result.length-1){
res.append(string);
}
else{
res.append(string).append(" ");
}
}
System.out.println(res.toString());
String abc = res.toString();
}
看看这个问题:Is there an insertion order preserving Set that also implements List?