PDA

View Full Version : کار با substring و indexof



kahkeshane2012
جمعه 19 مهر 1392, 15:25 عصر
با عرض سلام و احترام خدمت تمام دوستان.
یک قطعه کد ساده نوشتم که درون تکس باکس وقتی کاربر نام و نام خانوادگی خود را تایپ کرد در دو لیبل نمایش بدهد و هر چه فاصله اول اخر ان است را ندیده بگیرد و تنها یک فاصله بین نام نام خانوادگی را درنظر بگیرد و بقیه ی ان را با trim حذف کند؛ کد بنده کار میکند اما وقتی بعد از نام خانوادگی یک فاصله میزارم باید ندیده بگیرد که نمیگیرد؛ به نظرم Trim اصلا کار نمیکنه چون اول نام هم فاصله میزارم ؛فاصله کار میکنه؛ ممنون میشم اگر که اشکال کدم را بگید.
با تشکر.
string str = textBox1.Text;
str.Trim();
int i = textBox1.Text.Length;
int j = str.LastIndexOf(" ");
str.Trim();
label1.Text = str.Substring(j+1);
label2.Text = str.Substring(0, j);

danialafshari
جمعه 19 مهر 1392, 17:09 عصر
سلام
این همه کد برای چیه؟
string str=textBox1.Text.TrimStart(); // Ebteda

string str=textBox1.Text.TrimEnd(); // Enteha

string str=textBox1.Text.Trim(); // har 2 taraf

abdullah20
جمعه 19 مهر 1392, 18:44 عصر
برای حذف فاصله ها از ابتدا و انتها و قرار دادن فقط یک فاصله در بین نام و نام خانوادگی از کد زیر استفاده کنید
textBox1.Text = Regex.Replace(textBox1.Text, @"\s+", " ").Trim() ;

kahkeshane2012
جمعه 19 مهر 1392, 20:01 عصر
دوستان ممنونم از پاسختون اما من میخوام نام و نام خانوادگی را از هم تفکیک کنم و در دو برچسب نمایش بدم. که از split استفاده کردم اونم جواب درستی نداد. باید از substring استفاده کرد؛ سوال اینه کدم کجاش مشکل داره??؟؟

kahkeshane2012
جمعه 19 مهر 1392, 20:27 عصر
دوست دارم بدونم مشکل کده خودم چی بوده که گفتم هر چی فاصله اول و اخر تکس باکس است بردار بعد طولش رو بدست میاره و اندیس اولین فاصله از اخر بدست میاره و بعد دوباره هر چی فاصله هست برمیدارد(بین نام نام خانوادگی) و بعد هم چاپ میکنه.
و اما جناب abdullah20 کد شما با کمی تغییرات جواب داد به صورت :
textBox1.Text = Regex.Replace(textBox1.Text, @"\s", " ").Trim();
string str = textBox1.Text;
int i= str.LastIndexOf(" ");
label1.Text = str.Substring(0, i);
label2.Text = str.Substring(i + 1);

abdullah20
جمعه 19 مهر 1392, 20:28 عصر
کد شما باز هم اشکال داره
برای این که وقتی کاربر نام و نام خانوادگی را در تکس باکس وارد کرد نام را در یک لیبل و نام خانوادگی را در لیبل دیگر نمایش بدید میتونید از کد زیر استفاده کنید:
string[] words = Regex.Replace(textBox1.Text, @"\s+", " ").Trim().Split(' ');
label1.Text = words[0];
label2.Text = words[1];

ولی در اینجا مثلا اگر " عبداله اسکندری " را وارد کنید مشکلی نیست جون دو قسمت هستش و به خوبی کار میکنه ولی اگر نام و نام خاوادگی چند قسمت بود مثلا " محمد رضا رسولی نژاد" شما از کجا میخواید متوجه بشید که کدوم قسمت اسم و کدوم قسمت نام خانوادگی هستش؟

kahkeshane2012
جمعه 19 مهر 1392, 20:40 عصر
به این موضوع هم فکر کردم اما فعلا متاسفانه به نتیجه ای نرسیدم بین محمدرضا برفرض کاربر فاصله نزنه اما رسولی نژاد امکانش نیست :(

mhsmity
پنج شنبه 25 مهر 1392, 01:51 صبح
سلام اگه رشته وردی بیش از حد فاصله داشته باشه رو درست می کنه.
مثلا " محمد علی حسین اکبر "

خروجی ="محمد علی حسین اکبر"

string DelSpaceInString(string StrName)
{
string re = "";
string[] str = StrName.Trim().Split(' ');
foreach (string s in str)
{
if (s != "")
re += s+ " ";
}
return re.Trim();
}

از دوستان کسی هست که برای این رشته تابع اصلاح کننده بنویسه. یعنی بین اسم ها یک فاصله ایجاد کنیم.

" محمدمیلادحسین "
خروجی ="محمد میلاد حسین"