我有一个字符串:
www.domain.com/I-Need-This-Part
我需要检测 / 之后最常用的分隔符是什么,在这种情况下是 - 。分隔符可能会根据 url 改变。
一旦我解决了这个问题,我将使用 .split 并传入最常用的分隔符来计算部分。
对此的任何帮助将不胜感激。
先感谢您。
我有一个字符串:
www.domain.com/I-Need-This-Part
我需要检测 / 之后最常用的分隔符是什么,在这种情况下是 - 。分隔符可能会根据 url 改变。
一旦我解决了这个问题,我将使用 .split 并传入最常用的分隔符来计算部分。
对此的任何帮助将不胜感激。
先感谢您。
定义分隔符,然后对它们进行计数和排序。
定义它们取决于您。
此处的计数是一个链接:Java:如何计算字符串中字符的出现次数?
并且您可以通过使用具有适当比较器和内容类型的 TreeMap 来进行动态排序,例如 A Delimiter - nrOfOccurrences 对。(PriorityQueue 也可以解决问题)
首先想到的是:
如果你只有几个分隔符,你应该使用 zeller 的答案。如果你有很多分隔符,这个算法应该更有效。
仅计算您认为作为分隔符候选的字符应该是一项非常简单的任务。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);
假设您有一组特定的可能分隔符,您可以使用Apache Commons库并使用它们的
StringUtils.countMatches
计算出现次数的方法。
另一种方式(同样,如果您已经有一个分隔符列表),您可以通过创建一个 Map (key = delimiter, value= count) 来遍历 String 一次,当您遇到分隔符时,将其放入映射中,如果它已经存在,增加计数。从那里,您可以找出哪个条目的计数最高。