我有一个字符串:
www.domain.com/I-Need-This-Part
我需要检测在 / 后面最常用的分隔符是什么,这种情况下是 - 。分隔符可能会根据 URL 的不同而发生变化。
一旦我弄清楚了这个问题,我将使用 .split 并传递最常用的分隔符来计算部分。
如果您能提供任何帮助,将不胜感激。
提前感谢您。
我有一个字符串:
www.domain.com/I-Need-This-Part
我需要检测在 / 后面最常用的分隔符是什么,这种情况下是 - 。分隔符可能会根据 URL 的不同而发生变化。
一旦我弄清楚了这个问题,我将使用 .split 并传递最常用的分隔符来计算部分。
如果您能提供任何帮助,将不胜感激。
提前感谢您。
定义分隔符,然后计数并排序。
定义它们由您决定。
计数可以参考此链接:Java:如何计算字符串中字符的出现次数?
您可以使用TreeMap进行即时排序,并使用适当的比较器和内容类型,例如 分隔符 - 出现次数 对。 (PriorityQueue 也可以胜任)
首先想到的是:
如果您只有少量的分隔符,那么应该使用zeller的答案。如果您有很多分隔符,则此算法应该更有效。
++--+
。你看到第一个 +
,所以你保存了 (+, 1)
。接下来的 +
,你加一得到 (+, 2)
。现在你看到了一个 -
。你该怎么办?删除 +
吗?所以你保存了 (-, 1)
,然后是 (-, 2)
。现在又出现了一个 +
,这会使 +
成为最频繁的字符,但你不知道,因为你已经删除了那个信息。 - Misch只需计算您认为是分隔符候选的字符数,这应该是一个非常简单的任务。例如,您可以使用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);
StringUtils.countMatches
计算出现次数的方法。
另一种方法(如果您已经有分隔符列表),可以通过创建一个 Map(键=分隔符,值=计数)来遍历字符串一次,并在遇到分隔符时将其放入 Map 中。如果它已经存在,则增加计数。从那里,您可以找出哪个条目具有最高计数。