3

我有一个字符串:

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

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

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

对此的任何帮助将不胜感激。

先感谢您。

4

4 回答 4

2

定义分隔符,然后对它们进行计数和排序。
定义它们取决于您。
此处的计数是一个链接:Java:如何计算字符串中字符的出现次数?
并且您可以通过使用具有适当比较器和内容类型的 TreeMap 来进行动态排序,例如 A Delimiter - nrOfOccurrences 对。(PriorityQueue 也可以解决问题)

于 2012-07-09T20:24:15.797 回答
1

首先想到的是:

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

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

于 2012-07-09T20:24:30.837 回答
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);
于 2012-07-09T20:21:51.467 回答
0

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

StringUtils.countMatches

计算出现次数的方法。

另一种方式(同样,如果您已经有一个分隔符列表),您可以通过创建一个 Map (key = delimiter, value= count) 来遍历 String 一次,当您遇到分隔符时,将其放入映射中,如果它已经存在,增加计数。从那里,您可以找出哪个条目的计数最高。

于 2012-07-09T20:27:52.303 回答