Java - 如何识别最常用的分隔符

时间:2012-07-09 20:17:20

标签: java

我有一个字符串:

www.domain.com/I-Need-This-Part

我需要检测最常用的分隔符是什么/在这种情况下是/ - 。分隔符可能会根据网址而改变。

一旦我解决了这个问题,我将使用.split并传入最常用的分隔符来计算部分。

对此的任何帮助都将非常感激。

提前谢谢。

4 个答案:

答案 0 :(得分:2)

定义分隔符,然后对它们进行计数并对它们进行排序 定义它们取决于你。
这里有一个链接:Java: How do I count the number of occurrences of a char in a String?
您可以使用TreeMap进行动态排序,例如使用适当的比较器和内容类型,例如:分隔符 - nrOfOccurrences对。 (PriorityQueue也可以做到这一点)

答案 1 :(得分:1)

首先想到的是:

  • 迭代要计算分隔符的字符串部分
  • 检查当前char是否为分隔符(最好是O(1))
  • 有一个从char到int的hashmap,如果没有插入则插入当前分隔符,否则++表示该条目
  • 遍历hashmap以找到最常用的分隔符

如果你只有很少的分隔符,你应该使用zeller的答案。如果你有很多分隔符,这个算法应该更有效。

答案 2 :(得分:0)

计算您认为是分隔符候选者的字符应该是一项非常简单的任务。例如,您可以使用indexOf

final String url  = "www.domain.com/I-Need-This-Part";
final int neededStart = url.indexOf('/')+1;
char mostFrequent = '\u0000';
int highestFreq = 0;
for (char delim : new char[] {'%', '-', '$', '+'}) {
  int cnt = 0;
  for (int i = url.indexOf(delim, neededStart); i != -1;
        i = url.indexOf(delim, i+1), cnt++);
  if (cnt > highestFreq) { highestFreq = cnt; mostFrequent = delim; }
}
System.out.println(mostFrequent);

答案 3 :(得分:0)

假设您有一组特定的可能分隔符,您可以使用Apache Commons库并使用它们的

StringUtils.countMatches

计算出现次数的方法。

另一种方式(再次,如果你已经有一个分隔符列表),你可以通过创建一个Map(key = delimiter,value = count)迭代一次String,当你遇到分隔符时,把它放在地图中,如果已存在,则递增计数。从那里,您可以确定哪个条目具有最高计数。