【问题标题】:Remove repetitive string from sentence in java从java中的句子中删除重复的字符串
【发布时间】:2015-06-09 09:39:52
【问题描述】:

我正在编写要删除重复单词的 java 代码。如果我在任何单词中有空格,则以下代码可以很好地删除它们,例如: 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();
}

【问题讨论】:

  • 好吧,我不知道我是否理解正确,但你可以尝试类似 name1.split("\\s|\\.|,|\\-")
  • 我已经执行了你的代码,它产生了1298 Anthony.ef。这不是你所追求的吗?
  • 而不是 name1.split((\\s|\p{Punct})+) 参见docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 了解不同的字符类别。

标签: java string repeat


【解决方案1】:

您将name1 拆分为空格。您可以尝试将name1 拆分为any non-word character

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?

【讨论】:

  • 感谢您的回复。你能在这里解释一下吗,我完全没明白你的意思。
  • 只是“Anthony.ef”会被拆分成“Anthony”和“ef”
  • @Android_Zapier 见documentation
  • @Android_Zapier 您希望单词以什么顺序出现?如果您想保留原始字符串中的顺序,您可能需要使用LinkedHashSet 而不是HashSet。看看这个问题:stackoverflow.com/questions/8185090/…
  • @defaultlocale 非常感谢亲爱的,正如您在此处所说的那样,它可以完美运行。谢谢.....!!!
猜你喜欢
  • 2023-01-11
  • 2015-02-19
  • 2018-02-20
  • 2012-10-21
  • 2020-11-12
  • 2021-04-13
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多