PDA

View Full Version : سوال: يك سوال در مورد "حساسيت حروف" در رشته ها(Case Sensitive)



newgoldenman
یک شنبه 29 دی 1387, 14:08 عصر
سلام دوستان
سوال من يكمي توضيح داره!
ببينيد:
رشته ي زير رو در نظر بگيريد:
"Salam sAlam SAlam saLam salAm salaM SALAM salam saLAm"

همه ي اينها كلمه ي SALAM هستند، ولي هر كدوم با تعدادي حروف كوچيك و تعدادي بزرگ،بعضي فقط كوچيك و بعضي فقط بزرگ.
حالا من چطور ميتونم توي اين رشته، همه ي اين كلمات رو استخراج كنم؟ چرا كه اگر از كلاس Contains استفاده كنيم، فقط هموني رو به ما ميده كه دقيقاً مشخص كرديم. مثلاً:

if (myString.Contains("Salam"))
{
//ToDo
}
اين فقط كلمه ي Salam رو ميگرده. ولي من ميخوام كه اگر Salam هم نبود، و به جاش مثلاً SAlaM بود، باز هم بتونه پيدا كنه.

در واقع كاري كه من ميخوام بكنم اين هست كه تمامي لغات رو جدا ميكنم، و اگر با رشته ي مورد نظر، مساوي بود، تعدادشون رو شمارش كنم. مثلاً توي رشته ي من، 9 تا كلمه ي SALAM داريم، ولي بودن حساسيت به بزرگي و كوچيكي.


ممنون ميشم از دوستان كسي بتونه كمكم كنه.
موفق باشيد.

captain_black81
یک شنبه 29 دی 1387, 14:26 عصر
میتونید از uppercase استفاده کنید
مثلا ملاک رو روی حروف بزرگ بذارید

مثال: فرض کنید مقدار در textBox1 وارد میشود


if (textBox1.Text.ToUpper() == "SALAM")
{

}

یا یه چیزی شبیه این!!!
اونوقت هرجوری که بنویسند با حروف بزرگش مقایسه میشه

واسه مثال خودتم این میشه


if (textBox1.Text.ToUpper().Contains("SALAM"))
{

}

goodarzi121
یک شنبه 29 دی 1387, 14:34 عصر
if (myString.ToLower.Contains("Salam"))
{
//ToDo
}

newgoldenman
یک شنبه 29 دی 1387, 14:38 عصر
دوستان گلم ممنونم بابت توجهتون. ولي انگار درست متوجه سوال من نشديد.
من با ToUpper و ToUpper ميتونم كار كنم، ولي توي مثال من، فقط ميشه رشته هاي SALAM و salam رو پيدا كرد. در صورتي كه من بقيه ي اونها رو هم ميخوام پيدا كنه.

موفق باشيد.

captain_black81
یک شنبه 29 دی 1387, 14:44 عصر
عزیز دل شما وقتی کل رشته ات رو به toupperتبدیل میکنی همه saLAm ها هم به SALAM تبدیل میشن و پیدا میشن

newgoldenman
یک شنبه 29 دی 1387, 14:52 عصر
عزیز دل شما وقتی کل رشته ات رو به toupperتبدیل میکنی همه saLAm ها هم به SALAM تبدیل میشن و پیدا میشن
بله دوست من. اين كارو ميشه با ToLower و salam هم انجام داد. ولي حالا ديگه اون رشته ي اوليه ام رو از دست دادم. من نميخوام رشته ي اوليه ام رو از دست بدم.
اصلاً هدف من اين هست كه همه ي كلماتي كه مشابه Salam هستند، يعني اون 9 تا كلمه، از توي رشته ي حاوي اونها بخونم، اگر شبيه بودند، "عيناً" خودشون رو توي RichTextBox بصورت Selected در بيارم و Highlight بزنم. يعني مثلاً رشته ي :

"Salam iran sAlam a SAlam ali saLam 2 salAm 12 salaM 40 SALAM persia salam pars saLAm"
با كلمه ي كليدي: "Salam"، بصورت زير درون RichTextBox نشون داده بشه:


"Salam iran sAlam a SAlam ali saLam 2 salAm 12 salaM 40 SALAM persia salam pars saLAm"

فكر كنم يكم سوالم طولاني شد!
بازم ممنونم.

mehdi.mousavi
یک شنبه 29 دی 1387, 15:51 عصر
بله دوست من. اين كارو ميشه با ToLower و salam هم انجام داد. ولي حالا ديگه اون رشته ي اوليه ام رو از دست دادم. من نميخوام رشته ي اوليه ام رو از دست بدم.

سلام.
یک راهش اینه:



String searchFor = "salam";
String statement = "Salam sAlam SAlam saLam salAm salaM SALAM salam saLAm";

foreach (String token in statement.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries))
{
if (String.Compare(token.Trim(), searchFor, true) == 0)
{
//Do whatever suits you with the "token"...
}
}


یک راهش استفاده از Regular Expression هاست و N تا راه دیگه هم داره!

newgoldenman
یک شنبه 29 دی 1387, 15:54 عصر
بسيار ممنونم دوست عزيز، mehdi6755 جان.
فقط يه لطف بكني، اين خط رو يه توضيح كوچيك بدي، ديگه نور علي نور. دست گلتم درد نكنه بابت پاسخت.

if (String.Compare(token.Trim(), searchFor, true) == 0)
اين تابع token.Trim() دقيقاً چه كاري انجام ميده؟

mehdi.mousavi
یک شنبه 29 دی 1387, 15:57 عصر
بسيار ممنونم دوست عزيز، mehdi6755 جان.
فقط يه لطف بكني، اين خط رو يه توضيح كوچيك بدي، ديگه نور علي نور. دست گلتم درد نكنه بابت پاسخت. اين تابع token.Trim() دقيقاً چه كاري انجام ميده؟

تابع Trim کلیه Space های ابتدایی و انتهایی token رو حذف میکنه و سپس مقایسه رو انجام میده. بعبارت دیگه، اگه token باشه "Salam " (یک Space قبلش هست)، token.Trim() میشه "Salam" یعنی اون Space اول حذف شده.

پاورقی: همه اینها رو میتونید در MSDN پیدا کنید و اینقدر هم به سختی نیفتید.

newgoldenman
یک شنبه 29 دی 1387, 16:07 عصر
پاورقی: همه اینها رو میتونید در MSDN پیدا کنید و اینقدر هم به سختی نیفتید.
بله، ولي خوب ديدم چون آنلاين هستيد الان ... اينه كه مزاحم شما شدم. مممنونم كه با صبر و حوصله پاسخ داديد باز.

ابتدا اونو trim کرده و سپس اونو با مقداری که می خواهید مقایسه می کنه.
پس Trim كردن حساس بودن رو از بين ميبره؟! اگه اينطوره كه خيلي عاليه.
دست شما و دوست ديگرمون mehdi6755 عزيز درد نكنه. خدا خيرتون بده.
موفق باشيد.

(راستي آقاي كياني، من توي ابزارهاي تاپيكم گزينه ي انتخاب به عنوان راه حل ندارم. گم شده انگار!!)

mehdi.mousavi
یک شنبه 29 دی 1387, 16:16 عصر
بله، ولي خوب ديدم چون آنلاين هستيد الان ... اينه كه مزاحم شما شدم. مممنونم كه با صبر و حوصله پاسخ داديد باز. پس Trim كردن حساس بودن رو از بين ميبره؟!

نه! اشتباه نکنید. Trim بودن، Space های اضافی رو از بین میبره و کاری با Case-Sensitivity رشته نداره. اگه دقت کنید، در کدی که نوشتم، از String.Compare استفاده کردم، که پارامتر سومش رو true زدم. این یعنی مقایسه رو بدون توجه به بزرگ و کوچک بودن حروف رشته انجام بده!

Mahdi.Kiani
یک شنبه 29 دی 1387, 16:19 عصر
بله، ولي خوب ديدم چون آنلاين هستيد الان ... اينه كه مزاحم شما شدم. مممنونم كه با صبر و حوصله پاسخ داديد باز.

پس Trim كردن حساس بودن رو از بين ميبره؟


خیر.. trim کردن، فقط فضا های خالی قیل و بعد از رشته را ازبین می بره... String.Trim() Method (http://msdn.microsoft.com/en-us/library/aa904317(VS.71).aspx)


Removes all occurrences of white space characters from the beginning and end of this instance.

******************************



(راستي آقاي كياني، من توي ابزارهاي تاپيكم گزينه ي انتخاب به عنوان راه حل ندارم. گم شده انگار!!)

در اثر ارتقاع به نسخه جدیدتر غیر فعال شده که به زودی حل خواهد شد.