我正在研究要删除重复单词的Java代码。例如,如果我在任何单词中都有空格,则以下代码可以很好地删除它们:
1298 Anthony 1298 Anthony,它将如下所示:
1298 Anthony

但是对于任何其他特殊字符,例如:
1298 Anthony.ef 1298 Anthony.ef,它将显示为:
ef. 1298 Anthony

我的方法在下面给出,我想使它适用于每个特殊字符,特别是:coma(,),fullstop(。),破折号(-),下划线(_)。请帮我解决这个问题。

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();
}

最佳答案

您要在空格周围分割name1。您可以尝试在any non-word character周围拆分name1

names.split("\\W+");


方法String.split接受正则表达式作为参数。引用文档:


  围绕给定正则表达式的匹配项拆分此字符串。


name1.split(" ");将字符串拆分为单个空格并返回数组:[1298, Anthony.ef, 1298, Anthony.ef]

names.split("\\W+");将字符串拆分为任何非单词字符(逗号,点,破折号等)并返回数组:[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 - 从Java中的句子中删除重复字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30728426/

10-09 02:09