我正在遷移遺留的PHP應用程序到.net,其中一個要求是URL保持與以前完全一樣。php的str_word_count到c#的端口#
要生成友好的URL,遺留應用程序使用str_word_count
,我想知道是否有這個函數的端口到C#?
我正在遷移遺留的PHP應用程序到.net,其中一個要求是URL保持與以前完全一樣。php的str_word_count到c#的端口#
要生成友好的URL,遺留應用程序使用str_word_count
,我想知道是否有這個函數的端口到C#?
好吧,這裏是我的「壞的C#」示例(在混合返回類型中模仿PHP)。這是一個相當簡單的實現,利用.NET的正則表達式。
private enum WORD_FORMAT
{
NUMBER = 0,
ARRAY = 1,
ASSOC = 2
};
private static object str_word_count(string str, WORD_FORMAT format, string charlist)
{
string wordchars = string.Format("{0}{1}", "a-z", Regex.Escape(charlist));
var words = Regex.Matches(str, string.Format("[{0}]+(?:[{0}'\\-]+[{0}])?", wordchars), RegexOptions.Compiled | RegexOptions.IgnoreCase);
if (format == WORD_FORMAT.ASSOC)
{
var assoc = new Dictionary<int, string>(words.Count);
foreach (Match m in words)
assoc.Add(m.Index, m.Value);
return assoc;
}
else if (format == WORD_FORMAT.ARRAY)
{
return words.Cast<Match>().Select(m => m.Value).ToArray();
}
else // default to number.
{
return words.Count;
}
}
所以函數會返回一個Dictionary<int,string>
如果你選擇ASSOC
,一個string[]
如果你選擇ARRAY
和簡單int
如果你選擇NUMBER
。
一個例子(我複製PHP的例子here
static void Main(string[] args)
{
string sentence = @"Hello fri3nd, you're
looking good today!";
var assoc = (Dictionary<int,string>)str_word_count(sentence, WORD_FORMAT.ASSOC, string.Empty);
var array = (string[])str_word_count(sentence, WORD_FORMAT.ARRAY, string.Empty);
var number = (int)str_word_count(sentence, WORD_FORMAT.NUMBER, string.Empty);
//test the plain array
Console.WriteLine("Array\n(");
for (int i = 0; i < array.Length; i++)
Console.WriteLine("\t[{0}] => {1}", i, array[i]);
Console.WriteLine(")");
// test the associative
Console.WriteLine("Array\n(");
foreach (var kvp in assoc)
Console.WriteLine("\t[{0}] => {1}", kvp.Key, kvp.Value);
Console.WriteLine(")");
//test the charlist:
array = (string[])str_word_count(sentence, WORD_FORMAT.ARRAY, "àáãç3");
Console.WriteLine("Array\n(");
for (int i = 0; i < array.Length; i++)
Console.WriteLine("\t[{0}] => {1}", i, array[i]);
Console.WriteLine(")");
//test the number
Console.WriteLine("\n{0}", number);
Console.Read();
}
但是,我想在此處添加註釋:不要返回對象它的工作原理AOK用PHP,因爲它不是一個強類型語言。真的,你應該寫功能的各個版本,以配合每個不同格式不管怎麼說,這應該讓你開始:)
輸出:
Array
(
[0] => Hello
[1] => fri
[2] => nd
[3] => you're
[4] => looking
[5] => good
[6] => today
)
Array
(
[0] => Hello
[6] => fri
[10] => nd
[14] => you're
[25] => looking
[42] => good
[47] => today
)
Array
(
[0] => Hello
[1] => fri3nd
[2] => you're
[3] => looking
[4] => good
[5] => today
)
7
而不是使用字典,爲什麼你不能使用數組?它是否總是增加1? –
關聯性詞典。它將單詞索引映射到單詞本身,也可以使用HashMap或類似的東西,但不是數組。當請求的格式是一個數組時,我會返回一個數組。 –
AFAIK有否b用C#做到這一點。不過,你可以寫一些相當簡單的東西。 – Matt
[請查看我的谷歌搜索結果](https://www.google.com/webhp?sourceid=chrome-instant&ie=UTF-8&ion=1#hl=zh-CN&sclient=psy-ab&q=c%23+word+count+功能和OQ = C%+ 23 +字計數+功能&gs_l = hp.3..0i30.2799.15398.0.15584.45.25.11.5.5.2.320.4450.0j16j7j1.24.0.les%3B..0.0 ... 1c.jTOzzkTEyAA&PBX = 1&BAV = on.2,or.r_gc.r_pw.r_cp.r_qf。&fp = f0056a833a456726&ion = 1&biw = 1280&bih = 939) – Matt
您是否需要支持各種語言環境(即特殊字符,如é),還是西文字母足夠了希望如此,如果這與URL有關)。無論如何,我會發布我的答案。 –