私は文字列を持っています:
www.domain.com/I-Need-This-Part
/ の後に最も頻繁に使用される区切り文字を検出する必要があります。この場合は - です。URLによって区切り文字が変わる場合があります。
これを解決したら、.split を使用し、最も頻繁に使用される区切り文字を渡してパーツを数えます。
これに関するヘルプは大歓迎です。
前もって感謝します。
私は文字列を持っています:
www.domain.com/I-Need-This-Part
/ の後に最も頻繁に使用される区切り文字を検出する必要があります。この場合は - です。URLによって区切り文字が変わる場合があります。
これを解決したら、.split を使用し、最も頻繁に使用される区切り文字を渡してパーツを数えます。
これに関するヘルプは大歓迎です。
前もって感謝します。
区切り文字を定義し、それらを数えて並べ替えます。
それらを定義するのはあなた次第です。
ここに数えるためのリンクがあります:Java:文字列内の文字の出現回数をどのように数えますか?
また、たとえば A Delimiter - nrOfOccurrences ペアなど、適切なコンパレータとコンテンツ タイプを使用して TreeMap を使用することで、オンザフライで順序付けを行うことができます。(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
出現回数の計算方法。
もう 1 つの方法 (既に区切り記号のリストがある場合) では、マップ (キー = 区切り記号、値 = カウント) を作成して文字列を 1 回反復処理し、区切り記号に遭遇したら、それをマップに配置します (既に存在する場合)。存在する場合、カウントを増やします。そこから、カウントが最も高いエントリを特定できます。