3

私は文字列を持っています:

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

/ の後に最も頻繁に使用される区切り文字を検出する必要があります。この場合は - です。URLによって区切り文字が変わる場合があります。

これを解決したら、.split を使用し、最も頻繁に使用される区切り文字を渡してパーツを数えます。

これに関するヘルプは大歓迎です。

前もって感謝します。

4

4 に答える 4

2

区切り文字を定義し、それらを数えて並べ替えます。
それらを定義するのはあなた次第です。
ここに数えるためのリンクがあります:Java:文字列内の文字の出現回数をどのように数えますか?
また、たとえば A Delimiter - nrOfOccurrences ペアなど、適切なコンパレータとコンテンツ タイプを使用して TreeMap を使用することで、オンザフライで順序付けを行うことができます。(PriorityQueue もこのトリックを実行します)

于 2012-07-09T20:24:15.797 に答える
1

最初に頭に浮かぶこと:

  • 区切り文字をカウントする文字列の部分を反復処理します
  • 現在の文字が区切り文字かどうかを確認します (できれば O(1) で)
  • char から int へのハッシュマップを持ち、挿入されていない場合は現在の区切り文字を挿入し、そうでない場合は ++ そのエントリを挿入します
  • ハッシュマップを反復処理して、最も使用された区切り文字を見つけます

区切り文字が少ない場合は、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

出現回数の計算方法。

もう 1 つの方法 (既に区切り記号のリストがある場合) では、マップ (キー = 区切り記号、値 = カウント) を作成して文字列を 1 回反復処理し、区切り記号に遭遇したら、それをマップに配置します (既に存在する場合)。存在する場合、カウントを増やします。そこから、カウントが最も高いエントリを特定できます。

于 2012-07-09T20:27:52.303 に答える